Codeforces Round #581 (Div. 2)
时间:2019-08-22
本文章向大家介绍Codeforces Round #581 (Div. 2),主要包括Codeforces Round #581 (Div. 2)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
A:暴力。
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #define rep(i,l,r) for (int i=(l); i<=(r); i++) 6 typedef long long ll; 7 using namespace std; 8 9 const int N=1010; 10 int n; 11 char s[N]; 12 13 int main(){ 14 scanf("%s",s+1); n=strlen(s+1); bool flag=0; 15 rep(i,2,n) if (s[i]=='1') flag=1; 16 if (s[1]=='0'){ puts("0"); return 0; } 17 if (flag) printf("%d",(n+1)/2); else printf("%d\n",n/2); 18 return 0; 19 }
B:一定是1,2,4,...,2^k。最小和最大分别让1和2^k最多即可。
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #define rep(i,l,r) for (int i=(l); i<=(r); i++) 6 typedef long long ll; 7 using namespace std; 8 9 int n,l,r; 10 11 int main(){ 12 cin>>n>>l>>r; 13 ll s1=n-l+1; rep(i,1,l-1) s1+=1ll<<i; 14 ll s2=(1ll<<(r-1))*(n-r+1); rep(i,0,r-2) s2+=1ll<<i; 15 cout<<s1<<' '<<s2<<endl; 16 return 0; 17 }
C:先floyd求最短路,然后每次找到当前点至多往后多少个点可以保证p走的一直都是最短路,然后走到那个点去。由于p如果某时刻走的不是最短路了,那么之后走的一定也都不是最短路。
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #define rep(i,l,r) for (int i=(l); i<=(r); i++) 6 typedef long long ll; 7 using namespace std; 8 9 const int N=1010,M=2000010,inf=1e8; 10 char s[N]; 11 int n,m,tot,f[N][N],p[M],q[M]; 12 13 int main(){ 14 scanf("%d",&n); 15 rep(i,1,n) rep(j,1,n) f[i][j]=inf; 16 rep(i,1,n) f[i][i]=0; 17 rep(i,1,n){ 18 scanf("%s",s+1); 19 rep(j,1,n) if (s[j]=='1') f[i][j]=1; 20 } 21 rep(k,1,n) rep(i,1,n) rep(j,1,n) f[i][j]=min(f[i][j],f[i][k]+f[k][j]); 22 scanf("%d",&m); 23 rep(i,1,m) scanf("%d",&p[i]); 24 for (int i=1,j; i<m; i=j){ 25 q[++tot]=p[i]; 26 rep(k,i+1,m) if (f[p[i]][p[k]]==k-i) j=k; else break; 27 } 28 printf("%d\n",tot+1); 29 rep(i,1,tot) printf("%d ",q[i]); printf("%d\n",p[m]); 30 return 0; 31 }
D1/D2:首先0不会变成1,然后考虑1变成0的必要条件并证明它是充分的。1能变成0,当且仅当存在一个以这个位置开头的子序列,满足它是这个位置到n的LIS。于是边倒着DP做LIS边判断每个1是否可以变成0即可。
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 #define rep(i,l,r) for (int i=(l); i<=(r); i++) 6 typedef long long ll; 7 using namespace std; 8 9 const int N=100010; 10 char s[N],s2[N]; 11 int n,sm,ans[N],f[N][2]; 12 13 int main(){ 14 scanf("%s",s+1); n=strlen(s+1); 15 rep(i,1,n) s2[i]=s[i]; 16 for (int i=n; i; i--){ 17 if (s[i]=='0') f[i][0]=max(f[i+1][0],f[i+1][1])+1,f[i][1]=f[i+1][1],sm++; 18 else f[i][1]=f[i+1][1]+1,f[i][0]=f[i+1][0]; 19 ans[i]=max(f[i][0],f[i][1])-sm; 20 } 21 for (int i=n; i; i--) if (ans[i]!=ans[i+1]) s2[i]='0'; 22 rep(i,1,n) putchar(s2[i]); 23 return 0; 24 }
E:考虑求F[i]表示最大前缀和不小于i的数列个数,最后差分一下即可求出期望。先给结论:F[i]=C(n+m,n-i)。归纳证明,若数列最后一个数是-1,则前n+m-1个数的最大前缀和一定是i,这部分的贡献是C(n+m-1,n-i)。若是1,由于不能保证这个1一定在最大前缀和里,于是前n+m-1个数的最大前缀和仍然是i,这部分的贡献是C(n+m-1,n-i-1)。于是F[i]=C(n+m-1,n-i)+C(n+m-1,n-i-1)=C(n+m,n-i)。
1 #include<cstdio> 2 #include<algorithm> 3 #define rep(i,l,r) for (int i=(l); i<=(r); i++) 4 typedef long long ll; 5 using namespace std; 6 7 const int N=4010,mod=998244853; 8 int n,m,ans,x,y,C[N][N]; 9 10 int main(){ 11 scanf("%d%d",&n,&m); C[0][0]=1; 12 rep(i,1,n+m){ C[i][0]=1; rep(j,1,i) C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod; } 13 for (int i=n; i && i>=n-m; i--) x=(C[n+m][n-i]-y+mod)%mod,ans=(ans+1ll*x*i)%mod,y=(y+x)%mod; 14 printf("%d\n",ans); 15 return 0; 16 }
原文地址:https://www.cnblogs.com/HocRiser/p/11393677.html
- 数据库结构版本控制
- Extjs4---Cannot read property 'addCls' of null 或者 el is null 关于tab关闭后再打开不显示或者报错
- 【干货】什么?Python3.X不能输出中文?原来是编辑器geany的锅?!
- Shell 历史记录异地留痕审计与监控
- [译]WebAPI下的如何实现参数绑定
- 这或许是对小白最友好的python入门了吧——10,元组
- Extjs 在项目中碰到问题
- 网站防刷方案
- 如何正确的猜拳:反事实遗憾最小化算法
- 使用python中的Numpy进行t检验
- 实操 Web Cache
- 怎样制作RPM包
- 框架设计原则和规范(完)
- 这或许是对小白最友好的python入门了吧——9,数字深入体验
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- zabbix 监控项
- [PyQt Tutorial]4.使用Qt Designer
- [PyQt Tutorial]5.Signals & Slots(信号与槽)
- Docker数据共享与持久化
- [PyQt Tutorial]6.Layout Management(布局管理)
- Kubernetes入门
- [PyQt Tutorial]7.QDialog 类
- kubeadm快速部署kubernetes集群
- [PyQt Tutorial]8.QMessageBox
- Tomcat_01_简介
- Tomcat调优
- Tomcat_02_应用部署
- Tomcat_03_监控
- Kubernetes常用命令
- Oracle限制用户和客户端登陆