Codeforces_846
A.简单dp。
#include<bits/stdc++.h>
using namespace std; int n,a[],dp[][] = {}; int main()
{
ios::sync_with_stdio();
cin >> n;
for(int i = ;i <= n;i++) cin >> a[i];
int ans = ;
for(int i = ;i <= n;i++)
{
if(a[i] == )
{
dp[i][] = dp[i-][]+;
dp[i][] = dp[i-][];
}
else
{
dp[i][] = dp[i-][];
dp[i][] = max(dp[i-][],dp[i-][])+;
}
}
cout << max(dp[n][],dp[n][]) << endl;
return ;
}
B.枚举凑满了几个task。
#include<bits/stdc++.h>
using namespace std; int n,m,k,a[]; int main()
{
ios::sync_with_stdio();
cin >> n >> k >> m;
int sum = ;
for(int i = ;i <= k;i++)
{
cin >> a[i];
sum += a[i];
}
sort(a+,a++k);
int ans = ;
for(int i = ;i <= n;i++)
{
int cnt = n-i,left = m-sum*i,now = (k+)*i;
if(left < ) break;
for(int j = ;j <= k;j++)
{
if(left < a[j]*cnt)
{
now += min(cnt,left/a[j]);
break;
}
now += cnt;
left -= a[j]*cnt;
}
ans = max(ans,now);
}
cout << ans << endl;
return ;
}
C.预处理左右两个数的最大值,枚举中间那个点。
#include<bits/stdc++.h>
using namespace std; int n,l[],r[];
long long a[],sum[] = {},lm[],rm[]; long long f(int l,int r)
{
long long t1 = r == ?:sum[r-];
long long t2 = l == ?:sum[l-];
return t1-t2;
} int main()
{
ios::sync_with_stdio();
cin >> n;
for(int i = ;i < n;i++)
{
cin >> a[i];
sum[i] = sum[i-]+a[i];
}
for(int i = ;i <= n;i++)
{
int t;
long long maxx = -1e18;
for(int j = ;j <= i;j++)
{
if(f(,j)-f(j,i) > maxx)
{
maxx = f(,j)-f(j,i);
t = j;
}
}
l[i] = t;
lm[i] = maxx;
maxx = -1e18;
for(int j = i;j <= n;j++)
{
if(f(i,j)-f(j,n) > maxx)
{
maxx = f(i,j)-f(j,n);
t = j;
}
}
r[i] = t;
rm[i] = maxx;
}
long long maxx = -1e18;
int ans1,ans2,ans3;
for(int i = ;i <= n;i++)
{
if(lm[i]+rm[i] > maxx)
{
maxx = lm[i]+rm[i];
ans1 = l[i];
ans2 = i;
ans3 = r[i];
}
}
cout << ans1 << " " << ans2 << " " << ans3 << endl;
return ;
}
D.二分答案,二维前缀和判断。
#include<bits/stdc++.h>
using namespace std; int n,m,k,q,mp[][];
struct xx
{
int x,y,t;
friend bool operator<(xx a,xx b)
{
return a.t < b.t;
}
}a[]; bool ok(int t)
{
memset(mp,,sizeof(mp));
for(int i = ;i <= q && a[i].t <= t;i++) mp[a[i].x][a[i].y] = ;
for(int i = ;i <= n;i++)
{
for(int j = ;j <= m;j++) mp[i][j] += mp[i][j-]+mp[i-][j]-mp[i-][j-];
}
for(int i = ;i <= n-k+;i++)
{
for(int j = ;j <= m-k+;j++)
{
int endx = i+k-,endy = j+k-;
if(mp[endx][endy]-mp[i-][endy]-mp[endx][j-]+mp[i-][j-] == k*k) return ;
}
}
return ;
} int main()
{
ios::sync_with_stdio();
cin >> n >> m >> k >> q;
for(int i = ;i <= q;i++) cin >> a[i].x >> a[i].y >> a[i].t;
sort(a+,a++q);
int l = ,r = 1e9+;
while(l < r)
{
int mid = (l+r)/;
if(ok(mid)) r = mid;
else l = mid+;
}
if(l == 1e9+) cout << - << endl;
else cout << l << endl;
return ;
}
E.dfs从下到上处理每个点,注意超long long,负值太大直接NO。
#include<bits/stdc++.h>
using namespace std; int n,ok = ;
long long a[],b[];
struct xx
{
int to,k;
xx(int a,int b):to(a),k(b){};
};
vector<xx> v[]; void dfs(int now)
{
for(int i = ;i < v[now].size();i++)
{
int t = v[now][i].to,k = v[now][i].k;
dfs(t);
if(a[t] < )
{
if(1.0*a[t]*k+a[now] < -1e17) ok = ;
a[now] += a[t]*k;
}
else a[now] += a[t];
}
} int main()
{
ios::sync_with_stdio();
cin >> n;
for(int i = ;i <= n;i++) cin >> a[i];
for(int i = ;i <= n;i++) cin >> b[i],a[i] -= b[i];
for(int i = ;i <= n;i++)
{
int x,y;
cin >> x >> y;
v[x].push_back(xx(i,y));
}
dfs();
if(ok && a[] >= ) cout << "YES" << endl;
else cout << "NO" << endl;
return ;
}
F.记录每一个值的上一个位置,就容易计算每个点加入时增加的总价值。
#include<bits/stdc++.h>
using namespace std; int n,a[],la[] = {}; int main()
{
ios::sync_with_stdio();
cin >> n;
for(int i = ;i <= n;i++) cin >> a[i];
long long ans = ;
for(int i = ;i <= n;i++)
{
long long t1 = i-la[a[i]],t2 = n-i+;
ans += t1*t2;
la[a[i]] = i;
}
ans *= ;
ans -= n;
cout << fixed << setprecision() << 1.0*ans/n/n << endl;
return ;
}
Codeforces_846的更多相关文章
随机推荐
- [推荐]icheck-bootstrap(漂亮的ckeckbox/radiobox)
适用于Twitter Bootstrap框架的纯CSS样式的复选框/单选框按钮的插件. GitHub:https://github.com/bantikyan/icheck-bootstrap 如果你 ...
- linux各目录及重要目录的详细介绍
1 目录说明 根目录 (/) /bin bin是Binary的缩写, 这个目录存放着最经常使用的命令,比如ls,cat,mkdir等 /dev dev是Device(设备)的缩写, 该目录下存放的是L ...
- Spring Boot2.X整合消息中间件RabbitMQ原理简浅探析
目录 1.简单概述RabbitMQ重要作用 2.简单概述RabbitMQ重要概念 3.Spring Boot整合RabbitMQ 前言 RabbitMQ是一个消息队列,主要是用来实现应用程序的异步和解 ...
- Deepin Linux 实体机安装
Deepin Linux 实体机安装 1.下载ISO镜像并刻录到U盘上 系统ISO镜像下载 深度技术 刻录工具下载 深度技术(下方有深度启动盘制作工具下载) 这两个都下载好之后,打开刻录工具,选择镜像 ...
- fastjson使用详解
目录 二.fastjson使用 三.fastjson 常用 API 四.fastjson使用演示 测试类准备 1.java类转换为json字符串 2.json字符串转为java类 五.fastjson ...
- hexo博客零基础搭建系列(一)
文章目录 其他搭建 1.简介 2.安装Node和Git 3.安装Hexo 4.Hexo的目录结构 5.我的版本 其他搭建 不好意思,下面的链接都是CSDN的链接,如果要在博客园看,请点我的分类查看.因 ...
- 深入理解 Java 并发锁
本文以及示例源码已归档在 javacore 一.并发锁简介 确保线程安全最常见的做法是利用锁机制(Lock.sychronized)来对共享数据做互斥同步,这样在同一个时刻,只有一个线程可以执行某个方 ...
- linux入门系列8--shell编程
本文将结合前面介绍的Linux命令.管道符等知识,通过VI编辑器编写Shell脚本,实现能自动化工作的脚本文件. 在讲解Linux常用命令"linux入门系列5--新手必会的linux命令& ...
- 你在使用什么 Redis 客户端工具?
今天发现一个不错的 Redis 客户端工具:AnotherRedisDesktopManager. 兼容 Windows Mac Linux,号称又快又稳定,加载大量 keys 时也不会崩溃. Git ...
- ffifdyop——绕过中一个奇妙的字符串
根据师傅们的博客总结如下: ffifdyop 经过md5加密后:276f722736c95d99e921722cf9ed621c 再转换为字符串:'or'6<乱码> 即 'or'66� ...