Codeforces Round #551 (Div. 2) A~E题解
时间:2019-04-19
本文章向大家介绍Codeforces Round #551 (Div. 2) A~E题解,主要包括Codeforces Round #551 (Div. 2) A~E题解使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
突然发现上一场没有写,那就补补吧
本来这场应该5题的,结果一念之差E fail了
A. Serval and Bus
基本数学不解释,假如你没有+1 -1真的不好意思见人了
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; const int _=1e2; int s[110],d[110]; int main() { int n,T,mn=0; scanf("%d%d",&n,&T); for(int i=1;i<=n;i++) { scanf("%d%d",&s[i],&d[i]); if(s[i]<T) { s[i]+=((T-s[i]-1)/d[i]+1)*d[i]; } if(mn==0||s[i]<s[mn])mn=i; } printf("%d\n",mn); return 0; }
B. Serval and Toy Bricks
直接行列取min完事
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; const int _=1e2; int a[110],b[110],c[110][110]; int main() { int n,m,h; scanf("%d%d%d",&n,&m,&h); for(int i=1;i<=m;i++)scanf("%d",&a[i]); for(int i=1;i<=n;i++)scanf("%d",&b[i]); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&c[i][j]); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(c[i][j]==0)printf("0"); else { printf("%d",min(b[i],a[j])); } putchar(j==m?'\n':' '); } } return 0; }
C. Serval and Parenthesis Sequence
这题明显乱搞了,场上看错题意又写了个假的做法,最后迷迷糊糊乱搞了出来。
就是(不足n/2就先放就没了,这种东西都fail了两发
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; char ss[310000]; int num[310000]; int main() { int n; scanf("%d%s",&n,ss+1); if(n%2==1){puts(":(");return 0;} for(int i=n;i>=1;i--)num[i]=num[i+1]+(ss[i]=='('?1:0); int le=0,s=0; for(int i=1;i<=n;i++) { if(ss[i]=='(')le++,s++; else if(ss[i]==')') { if(le>0) { le--; if(le==0&&i!=n){puts(":(");return 0;} } else {puts(":(");return 0;} } else { if(s+num[i+1]<n/2)ss[i]='(',le++,s++; else { ss[i]=')',le--; if(le==0&&i!=n){puts(":(");return 0;} } } } if(s>n/2){puts(":(");return 0;} for(int i=1;i<=n;i++)printf("%c",ss[i]); return 0; }
D. Serval and Rooted Tree
这个题明显就是见过的套路,max就是子树max+其他子树的tot,min就是每个子树都取到max-1再+1
先是以为min是取max(子树max)wa了,然后又没用maxn搞的数组少一个0,这个时候心态已经崩了,zory 50min之前就做完了A~D
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; struct node { int x,y,next; }a[310000];int len,last[310000]; void ins(int x,int y) { len++; a[len].x=x;a[len].y=y; a[len].next=last[x];last[x]=len; } int op[310000],le[310000],mx[310000]; void dfs(int x) { if(last[x]==0)le[x]=1,mx[x]=1; else { if(op[x]==1) { int p1=0; for(int k=last[x];k;k=a[k].next) { int y=a[k].y; dfs(y); le[x]+=le[y]; if(p1==0||mx[y]-le[y]>mx[p1]-le[p1])p1=y; } mx[x]=le[x]-le[p1]+mx[p1]; } else { int num=0; for(int k=last[x];k;k=a[k].next) { int y=a[k].y; dfs(y); le[x]+=le[y]; num+=mx[y]-1; } mx[x]=num+1; } } } int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&op[i]); int F; for(int i=2;i<=n;i++) { scanf("%d",&F); ins(F,i); } dfs(1); printf("%d\n",mx[1]); return 0; }
E. Serval and Snake
结果突然不困了,发现这个E是个SB题,假如这个矩形里面有头或尾之一,那么他的度数就是1,直接枚举行列就可以定位,对于两个点在同一行/列的二分答案就好了,结果写萎了要算2020次正好被卡飞,第二天就被rose_king D飞了
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; bool check1(int t,int x,int y) { printf("? %d %d %d %d\n",t,x,t,y); fflush(stdout); int k;scanf("%d",&k); return k%2==1; } bool check2(int t,int x,int y) { printf("? %d %d %d %d\n",x,t,y,t); fflush(stdout); int k;scanf("%d",&k); return k%2==1; } int main() { int n; scanf("%d",&n); int ax,ay,bx,by,k,op=0; for(int i=1;i<=n;i++) { if(i==n&&op==0)break; printf("? 1 1 %d %d\n",i,n); fflush(stdout); scanf("%d",&k); if(k%2==1&&op==0) { ax=i; int l=1,r=n; while(l<=r) { int mid=(l+r)/2; if(check1(i,l,mid))r=mid; else l=mid+1; if(l==r){ay=l;break;} } op=1; } if(k%2==0&&op==1) { bx=i; int l=1,r=n; while(l<=r) { int mid=(l+r)/2; if(check1(i,l,mid))r=mid; else l=mid+1; if(l==r){by=l;break;} } printf("! %d %d %d %d\n",ax,ay,bx,by); fflush(stdout); return 0; } } op=0; for(int j=1;j<=n;j++) { printf("? 1 1 %d %d\n",n,j); fflush(stdout); scanf("%d",&k); if(k%2==1&&op==0) { ay=j; int l=1,r=n; while(l<=r) { int mid=(l+r)/2; if(check2(j,l,mid))r=mid; else l=mid+1; if(l==r){ax=l;break;} } op=1; } if(k%2==0&&op==1) { by=j; int l=1,r=n; while(l<=r) { int mid=(l+r)/2; if(check2(j,l,mid))r=mid; else l=mid+1; if(l==r){bx=l;break;} } printf("! %d %d %d %d\n",ax,ay,bx,by); fflush(stdout); return 0; } } return 0; }
结果zory A fail了都比我高。。
- 也谈事件(Event)
- Zuul:构建高可用网关之多维度限流
- Hystrix:HystrixCollapser请求合并
- oauth2.0 实现spring cloud nosession
- 基于自定义向导的C++单元测试环境自动化配置
- 【spring cloud】自定义jwt实现spring cloud nosession
- R语言的三种聚类方法
- ArrayList foreach 循环里进行元素的 remove add 操作有什么现象?
- 10个令人相见恨晚的R语言包
- 小心Windows旧版认证暴露你的系统帐户密码
- DNS Shell初体验
- 如何在Weka中加载CSV机器学习数据
- 老司机教你部署Cowrie蜜罐
- 时间序列预测如何变成有监督学习问题?
- 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 数组属性和方法
- Python SQLite 基本操作和经验技巧(一)
- Python字典及基本操作(超级详细)
- Python matplotlab库使用方法及注意事项
- 超性感的React Hooks(三):useState
- 数据库编程 MySQL 技巧与经验
- Python 编程开发 实用经验和技巧
- 超性感的React Hooks(四):useEffect
- Python 库的安装及使用 常见错误异常及解决办法
- Kafka三种可视化监控管理工具Monitor/Manager/Eagle
- 超性感的React Hooks(五):自定义hooks
- 三、变量对象
- Java编程 经验技巧汇总
- 关于IP地址的一些相关知识点
- vmware的三种网络模式
- 我的 Chrome 版本不支持生成二维码,30 分钟怒怼了一个插件,附源码