博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces Round #562 (Div. 2)
阅读量:5342 次
发布时间:2019-06-15

本文共 4724 字,大约阅读时间需要 15 分钟。

A. Circle Metro

题意:有两条线路线路,一条是正着走的,一条是倒着走的,一个人在第一条,一个人在第二条,给你两个人的起点和终点,问你是否能相遇。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define rep(i,a,b) for(int i=a;i<=b;i++)using namespace std;const int maxn=201010;int n,m,k;int a[maxn];ll rd(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}void init(){ int n,x,a,b,y,flag=0; scanf("%d%d%d%d%d",&n,&x,&a,&y,&b); for(int i=1;i<=n;i++) { x=x%n+1; y=(y+n-2)%n+1; if(x==y) { flag=1; break; } if(x==a) break; if(y==b) break; } //printf("%d %d\n",x,y); if(flag==1) printf("YES\n"); else printf("NO\n");}void work(){ }int main(){ init(); work();}
View Code

 

B. Pairs

题意:给你n对数ai和bi,问你是否存在两个数x,y使得在每一对数中至少出现一个x,或者一个y。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define rep(i,a,b) for(int i=a;i<=b;i++)using namespace std;const int maxn=201010;int n,m,k,len=0,x,y,a[301010];map
> mp;struct node{ int id,c;}p[301010];ll rd(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}bool cmp(node a,node b){ return a.c
0) { p[++len].id=i; p[len].c=a[i]; } } sort(p+1,p+1+len,cmp);// rep(i,1,len)// {// printf("%d %d\n",p[i].id,p[i].c);// } rep(i,1,len) { for(int j=len;j>i;j--) { if(p[i].c+p[j].c>=m) { //printf("i=%d j=%d\n",p[i].id,p[3].id); //printf("c=%d c=%d\n",p[i].c,p[3].c); if(p[i].c+p[j].c-mp[p[i].id][p[j].id]>=m) { //printf("%d %d\n",p[i].id,p[j].id); return 1; } } else break; } } return 0;}void work(){ }int main(){ if(init()) printf("YES\n"); else printf("NO\n"); work();}
View Code

 

C. Increasing by Modulo

题意:给你n个数,每次可以是一些数字加1并取余m,求最小的操作次数使数列非递减。

思路:二分操作次数即可

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define rep(i,a,b) for(int i=a;i<=b;i++)using namespace std;const int maxn=201010;int n,m,k,len=0,x,y,a[301010],b[301010];ll rd(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}void init(){ n=rd();m=rd(); rep(i,1,n) a[i]=rd();}bool check(int x){ for(int i=1;i<=n;i++) { if(b[i]
=b[i-1]) b[i]=b[i-1]; } else{ if((b[i]+x)%m>=b[i-1]&&(b[i]+x)>=m) b[i]=b[i-1]; } //if(x==0) printf("%d %d\n",i,b[i]); if(b[i]
>1; if(check(mid)) { l=mid+1; } else { r=mid-1; ans=mid; } } printf("%d\n",ans);}int main(){ init(); work();}
View Code

 

D. Good Triple

题意:给你一个字符串,问你存在Sn=Sn+k=Sn+2*k 的区间数量是多少

思路:猜测,当长度大于20时必定存在上述的式子,所以20以下直接暴力即可

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define rep(i,a,b) for(int i=a;i<=b;i++)using namespace std;const int maxn=201010;ll ans;char s[301010];int f[301010],l;ll rd(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}void init(){ scanf("%s",s); l=strlen(s); for(int i=0;i<=l;i++) f[i]=101010100; for(int i=0;i
=0;i--) { f[i]=min(f[i+1],f[i]); //printf("%d\n",f[i]); } for(int i=0;i
View Code

 

E. And Reachability

题意:

 

思路:dp[i][j]表示第i位,&1<<j!=0  最近的那个数是多少(倒着更新)

#include
#define rep(i,a,b) for(int i=a;i<=b;i++)#define dep(i,a,b) for(int i=b;i>=a;i--)using namespace std;#define ll long longconst int N=3e5+5;const int M=20;int n,m,q,sum,a[N],dp[N][25],last[N],x,y,flag;ll rd(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}int main(){ n=rd();m=rd(); rep(i,1,n) a[i]=rd(); rep(i,0,M) dp[n+1][i]=n+1,last[i]=n+1; dep(i,1,n) { rep(j,0,M) dp[i][j]=n+1; rep(j,0,M) if((a[i]&(1<
View Code

 

转载于:https://www.cnblogs.com/The-Pines-of-Star/p/11099908.html

你可能感兴趣的文章
饮冰三年-人工智能-Python-33博客园山寨版之报障管理
查看>>
“号码盾牌”,治企业飞单保行业信誉
查看>>
表单验证--扩展验证规则
查看>>
xcode - pod install 出现错误
查看>>
10-18 至 11-18 看书记录
查看>>
[转]python 3.x 与 2.x的区别
查看>>
自我回答,问题2:比如有个历史记录,,然后左边有个按钮btnleft,,右边有个按钮btnright,点击对应按钮,,就会有对应历史记录推进,或者后退...
查看>>
第七章
查看>>
composer install Your requirements could not be resolved to an installable set of packages
查看>>
作业二
查看>>
#类加载机制#
查看>>
Android 图片平铺实现方式
查看>>
个人工作总结03
查看>>
JPG、PNG和GIF图片的基本原理及优…
查看>>
oracle如何向空表中添加一个类型为clob的非空列
查看>>
堆和栈的区别
查看>>
操作系统(笔试系列)-第五讲存储器管理
查看>>
固定流程、自由流程和自定义流程的区别?
查看>>
jdbc作业3
查看>>
golang 单元测试
查看>>