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的更多相关文章
随机推荐
- 2019 年 stackoverflow 网站最受欢迎的 20 个 Python 问题
在最新一期的"Python开发者周刊"(Pycoder's weekly)里,我看到一则有意思的分享,故转出来分享给大家. 该分享来自是一份"python weekly ...
- POJ 3304 Segments(判断直线与线段是否相交)
题目传送门:POJ 3304 Segments Description Given n segments in the two dimensional space, write a program, ...
- 如何用visual studio code更好的编写python
目录 1.先决条件 2.Visual Studio Code扩展安装Python 3.Visual Studio Code扩展安装Python for VSCode 4.Visual Studio C ...
- mysql 多主一从
一.主服务器准备 1.1.环境准备 两台主机器ip分别为 100.100.100.105 (主1) 100.100.100.106(主2) 安装 mysql [root@centos ~]# yum ...
- Appium自动化测试框架研究(2)——搭建IOS环境
今天的文章讲iOS的Appium环境搭建. 对于iOS而言,只能在Mac笔记本上安装Appium,以及所需要的各种组件. 也许有人会问,能否在Windows系统上使用Appium测试iOS手机,这不就 ...
- Python工具类(二)—— 操作时间相关
#!/usr/bin/env python # -*- coding: utf-8 -*- """ __title__ = '操作时间的工具类' "" ...
- java项目Jenkins部署
假设背景: Nginx跳板机服务器:192.168.10.1 Tomcat应用服务器:192.168.10.3 端口:10083 应用名称:appXXX 1.配置跳板机的转发路径 如:192.168. ...
- 【Vue】强化表单的9个Vue输入库
一个设计不当的表单可能会使用户远离你的网站.幸运的是,对Vue开发者,有大量可用的Vue输入库让你轻松整理表单. 拥有直观而且对用户友好的表单有诸多好处,比如: 更高的转化率 更好的用户体验 更专业的 ...
- 「 神器 」快速启动应用Wox
每天进步一丢丢,连接梦与想 合理的的要求是锻炼 不合理的要求是磨练 过分的要求是锤炼 今天分享一个会让你爱不释手的神器,Wox Wox 是一款国产开源免费的软件快捷启动工具,它可以快速搜索并打开你电脑 ...
- openjudge 拯救公主
点击打开题目 看到这道题,第一感觉是我有一句m2p不知当讲不当讲 传送门就算了,你提莫还来宝石,还不给我每种最多有几个~~ 在一般的迷宫问题里,无论已经走了多少步,只要到达同一个点,状态便是等价的,但 ...