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的更多相关文章
随机推荐
- 亲测有效!CLion2019.2的安装及汉化
CLion的安装.汉化 今天小杨写C语言时,发现这个软件(DEV-C++)太麻烦了,于是就在网上找了一下,发现了两个不错的软件,一个是VC++,另一个是Clion.比较亲于占用内存小的我,选择了后者, ...
- samba服务器红帽5.4搭建,亲测可用!!!
samba服务器搭建 服务器的环境 红帽5.4 vm15 挂载光盘 mount mount -t iso9660 设备目录 /mnt 表示挂载 软件包安装 samba服务器只需安装两个软件包,先找到软 ...
- 【一起学源码-微服务】Ribbon 源码三:Ribbon与Eureka整合原理分析
前言 前情回顾 上一篇讲了Ribbon的初始化过程,从LoadBalancerAutoConfiguration 到RibbonAutoConfiguration 再到RibbonClientConf ...
- 配置本地目录作为yum端
---恢复内容开始--- 最近在配置gnome-session中发现需要太多依赖的包,又由于实验室使用的是局域网,没有办法连接网络,所以想着配置本地yum安装.在网上找了一些资料,经过整理,把自己这次 ...
- express框架中使用nodemon自启动服务
1.安装nodemon //全局安装 npm install -g nodemon //本地安装 npm install nodemon --save 2.修改package.json配置 " ...
- VUE CLI环境搭建文档
VUE CLI环境搭建文档 1.安装Node.js 下载地址 https://nodejs.org/zh-cn/download/ 2.全局安装VUE CLI win+R键打开运行cmd窗口输入一下代 ...
- Airbnb如何应用AARRR策略成为全球第一民宿平台
案例背景 基于房东和租客的痛点构建短租平台,但困于缓慢增长 2007年,住在美国旧金山的两位设计师——BrianChesky与Joe Gebbia正在为他们付不起房租而困扰.为了赚点外块,他们计划将阁 ...
- docker制作cenos+php56+nginx镜像
首先你环境要安装好docker 1 获取centos镜像. docker search centos 选取第一个官方镜像. docker pull docker.io/centos 新建镜像挂载目录 ...
- 中国传统色JSON数据
提取自中国色/colors.json 解析后存入数据库,导出插入语句chinese_colors.sql,提取码:5inu [ { "CMYK": [ 4, 5, 18, 0 ], ...
- 如何实施DevOps
对于长期在孤立的架构下工作的组织来说,转移到协作式DevOps系统似乎是难以成功的.为了进一步提高效率,必须改变观念,并进行团队文化改变.例如:许多人认为只有自动化工具才能解决DevOps,其实这是不 ...