Codeforces Round #521 Div. 3 玩耍记
A:签到。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int T;
int main()
{
T=read();
while (T--)
{
int a=read(),b=read(),k=read();
if (k&) cout<<1ll*(a-b)*(k>>)+a<<endl;
else cout<<1ll*(a-b)*(k>>)<<endl;
}
return ;
}
B:将能提供2贡献的位置先取反再扫一遍即可。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 110
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,a[N],ans=;
int main()
{
n=read();
for (int i=;i<=n;i++) a[i]=read();
for (int i=;i<=n-;i++) if (a[i]==&&a[i-]==&&a[i+]==&&a[i-]==&&a[i+]==) ans++,a[i]=;
for (int i=;i<n;i++) if (a[i]==&&a[i-]==&&a[i+]==) ans++,a[i+]=;
cout<<ans;
return ;
}
C:桶记录出现数字次数,枚举删掉的数字即可。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 200010
#define M 1000010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,a[N],b[N],tot[M],cnt;
ll sum;
int main()
{
n=read();
for (int i=;i<=n;i++) sum+=a[i]=read(),tot[a[i]]++;
for (int i=;i<=n;i++)
{
ll x=sum-a[i];
if (x<=&&x%==&&tot[x/]>(a[i]==x/)) b[++cnt]=i;
}
cout<<cnt<<endl;
for (int i=;i<=cnt;i++) printf("%d ",b[i]);
return ;
}
D:二分答案贪心选取即可。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 200010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,m,cnt[N],id[N],ans[N];
struct data
{
int x,y;
bool operator <(const data&a) const
{
return y>a.y;
}
}a[N],b[N];
bool check(int k)
{
for (int i=;i<=;i++) b[i]=a[i];
int s=;
for (int i=;i<=;i++)
while (b[i].y>=k&&s<m) id[++s]=b[i].x,b[i].y-=k;
return s>=m;
}
int main()
{
n=read(),m=read();
for (int i=;i<=n;i++) cnt[read()]++;
for (int i=;i<=;i++) a[i].x=i,a[i].y=cnt[i];
sort(a+,a+);
int l=,r=n/m;
while (l<=r)
{
int mid=l+r>>;
if (check(mid)) {for (int i=;i<=m;i++) ans[i]=id[i];l=mid+;}
else r=mid-;
}
for (int i=;i<=m;i++) printf("%d ",ans[i]);
return ;
}
E:枚举序列长度(显然是log级别的),二分首项大小,贪心选取即可。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 200010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,a[N],b[N],cnt[N],tot;
bool check(int k,int s)
{
int t=;
for (int i=;i<=n;i++)
{
if (a[i]>=k) t++,k<<=;
if (t==s) return ;
}
return ;
}
int main()
{
n=read();
for (int i=;i<=n;i++) b[i]=a[i]=read();
sort(b+,b+n+);
int t=unique(b+,b+n+)-b-;
for (int i=;i<=n;i++) a[i]=lower_bound(b+,b+t+,a[i])-b;
for (int i=;i<=n;i++) cnt[a[i]]++;
sort(cnt+,cnt+t+);
for (int i=;i<=t;i++) a[i]=cnt[i];
int tmp=n;
n=t;
for (int i=;i<=;i++)
{
int l=,r=tmp,ans=;
while (l<=r)
{
int mid=l+r>>;
if (check(mid,i)) ans=mid,l=mid+;
else r=mid-;
}
tot=max(tot,ans*((<<i)-));
}
cout<<tot;
return ;
}
F1:f[i][j]表示前i个数选取了j个且第i个被选的最大价值,转移枚举上次选哪个即可。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 5010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,m,k,a[N];
ll f[N][N];
int main()
{
n=read(),k=read(),m=read();
for (int i=;i<=n;i++) a[i]=read();
memset(f,,sizeof(f));
f[][]=;
for (int i=;i<=n;i++)
{
for (int j=;j<=m;j++)
{
for (int x=i-;x>=max(,i-k);x--)
f[i][j]=max(f[i][j],f[x][j-]+a[i]);
}
}
for (int i=n-;i>=max(,n-k+);i--) f[n][m]=max(f[n][m],f[i][m]);
if (f[n][m]<) cout<<-;
else cout<<f[n][m];
return ;
}
F2:在F1基础上单调队列优化即可。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 5010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,m,k,a[N],q[N],head,tail;
ll f[N][N];
int main()
{
n=read(),k=read(),m=read();
for (int i=;i<=n;i++) a[i]=read();
memset(f,,sizeof(f));
f[][]=;
for (int j=;j<=m;j++)
{
head=,tail=;q[]=;
for (int i=;i<=n;i++)
{
while (head<tail&&q[head]<i-k) head++;
f[i][j]=f[q[head]][j-]+a[i];
while (head<=tail&&f[q[tail]][j-]<=f[i][j-]) tail--;
q[++tail]=i;
}
}
for (int i=n-;i>=max(,n-k+);i--) f[n][m]=max(f[n][m],f[i][m]);
if (f[n][m]<) cout<<-;
else cout<<f[n][m];
return ;
}
小号打的。result:rank 3 rating +311
Codeforces Round #521 Div. 3 玩耍记的更多相关文章
- Codeforces Round #521 (Div. 3) E. Thematic Contests(思维)
Codeforces Round #521 (Div. 3) E. Thematic Contests 题目传送门 题意: 现在有n个题目,每种题目有自己的类型要举办一次考试,考试的原则是每天只有一 ...
- Codeforces Round #394 (Div. 2) 颓废记
昨天晚上(今天凌晨),又忍不住去打CF.(本蒟弱到只能打Div.2)... 我觉得我可以用一个词概括我这次的CF: 呵呵 刚一开赛,我就codeforces访问失败.. 后来好不容易能上了,两三分钟才 ...
- Codeforces Round#500 Div.2 翻车记
A:签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...
- Codeforces Round #521 (Div. 3) D. Cutting Out 【二分+排序】
任意门:http://codeforces.com/contest/1077/problem/D D. Cutting Out time limit per test 3 seconds memory ...
- CodeForces Round #521 (Div.3) E. Thematic Contests
http://codeforces.com/contest/1077/problem/E output standard output Polycarp has prepared nn competi ...
- CodeForces Round #521 (Div.3) D. Cutting Out
http://codeforces.com/contest/1077/problem/D You are given an array ss consisting of nn integers. Yo ...
- Codeforces Round #521 (Div. 3) F1. Pictures with Kittens (easy version)
F1. Pictures with Kittens (easy version) 题目链接:https://codeforces.com/contest/1077/problem/F1 题意: 给出n ...
- Codeforces Round #402 (Div. 2) 阵亡记
好长时间没有打Codeforces了,今天被ysf拉过去打了一场. lrd也来参(nian)加(ya)比(zhong)赛(sheng) Problem A: 我去,这不SB题吗.. 用桶统计一下每个数 ...
- CodeForces Round #521 (Div.3) B. Disturbed People
http://codeforces.com/contest/1077/problem/B There is a house with nn flats situated on the main str ...
随机推荐
- P3379 【模板】最近公共祖先(LCA)
P3379 [模板]最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询 ...
- JS代码优化及技巧
案例一 对象参数独立化 情景:为多个日期文本框添加日期选择器 源代码: $('#PropertySalesAdviceExchnagedDate1').datepicker({ showOn: 'b ...
- eclipse+tomcat配置远程debug调整
由于开发环境与真实服务器环境存在差异,有时开发时明明正常的逻辑,部署之后就会出现各种各样的问题,通过日志邮不能明确定位到问题的时候,可以采用远程debug调试来定位问题.下面就介绍一下具体的配置步骤: ...
- JVM监控远程服务器
1. 首先配置服务器端,进入服务器tomcat的bin目录下,打开catalina.sh配置文件,xxx为服务器配置路径. # cd /xxx/apache-tomcat-/bin # vim cat ...
- word record 2
word record 2 scavenger // si ga wen ger a person, animal or insect who takes what others have left ...
- 变量不加 var 声明——掉进坑中,无法自拔!
整整一下午,都在解决 window.onresize 中方法丢失不执行的问题!姿势固定在电脑前,颈椎病都犯了. 前些日子与大家分享了一下关于 防止jquery $(window).resize()多次 ...
- Skype for Business Server 方案
方案说明: 高可用性的配置屏蔽了单点故障,使得当一个服务器节点失效时,另外的可用的节点能够进行服务的接管.可伸缩性的配置可以保证当即时沟通平台的使用用户增加时,该平台应该具有良好的可伸缩性,能非常方便 ...
- 统计单词数:string函数使用
题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给 ...
- 吴恩达深度学习 反向传播(Back Propagation)公式推导技巧
由于之前看的深度学习的知识都比较零散,补一下吴老师的课程希望能对这块有一个比较完整的认识.课程分为5个部分(粗体部分为已经看过的): 神经网络和深度学习 改善深层神经网络:超参数调试.正则化以及优化 ...
- HDU 3062 Party(2-SAT模版题)
Problem Description 有n对夫妻被邀请参加一个聚会,因为场地的问题,每对夫妻中只有1人可以列席.在2n 个人中,某些人之间有着很大的矛盾(当然夫妻之间是没有矛盾的),有矛盾的2个人是 ...