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 ...
随机推荐
- ORB-SLAM(八)ORBmatcher 特征匹配
该类负责特征点与特征点之间,地图点与特征点之间通过投影关系.词袋模型或者Sim3位姿匹配.用来辅助完成单目初始化,三角化恢复新的地图点,tracking,relocalization以及loop cl ...
- webpack loader 生成虚拟文件的方案
此文已由作者张磊授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 前言 使用 webpack 的时候,难免需要写一些 loader,接着就会遇到一个很纠结的问题.该 loade ...
- javaweb(四)——Http协议(请求头,响应头详解)
一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...
- Click Once使用总结
做了一个CS结构软件,有十几个用户使用的客户端,因为刚开始试用期间,要不断根据用户使用情况修正问题和添加新功能,所以频繁更新是不可避免的,暂时没有深入去研究软件更新,暂时采取的方式是用户通过FTP自行 ...
- Java进阶——— 线程池的原理分析
前言 在了解线程池之前,其实首先出现的疑问是:为什么要使用线程池,其次是了解什么是线程池,最后是如何使用线程池,带着疑问去学习. 为什么要使用 前面多线程文章中,需要使用线程就开启一个新线程,简单方便 ...
- Caused by: java.lang.NoClassDefFoundError: javax/el/ELManager
出现问题的原因: 在将springboot项目部署到Linux下的Tomcat中,项目无法正常启动(本地能正常运行),Tomcat启动日志中出现: Caused by: java.lang.NoCla ...
- C#通过gridview导出excel
[CustomAuthorize] public FileResult ExportQuestionCenterExcel(SearchBaseQuestion search) ...
- [C++] OOP - Virtual Functions and Abstract Base Classes
Ordinarily, if we do not use a function, we do not need to supply a definition of the function. Howe ...
- CentOS Openvpn搭建以及 linux&&windows客户端的连接
本文参考:http://www.centoscn.com/CentosServer/test/2014/1120/4153.html 一. Server安装准备 (CentOS release ...
- 2018-8-29安装Jitamin过程实录
2018-8-29安装Jitamin过程实录 新建 模板 小书匠 欢迎走进zozo的学习之旅. 简介 安装 nginx + php + mysql 安装composer 安装Jitamin 简介 在考 ...