Codeforces Round #562 (Div. 2)
Posted mrdushe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #562 (Div. 2)相关的知识,希望对你有一定的参考价值。
A |
题意:两条循环线路,一条是递增,逐次增加1,到最大和最小的相邻;另一条线路递减,同前的规律。看他们是否会在同一时间,经过同一个站点
其实是一个水题,题目开始时读错了,wa了几发,还浪费了时间qwq,
题意:判断是否存在两个x,y ,使x,y至少有一个是在这些实数对中的;
题目的意思很简单,第一对a1,b1中,肯定至少有一个数是在x,y;分两种情况,1:x=a1,在不含x的实数对中找y ; 2:x=b1,在不含x的实数对中找y ;只要两种情况中有一种符合条件即可
/** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ * ┃ ━ ┃ * ┃ > < ┃ * ┃ ┃ * ┃... ⌒ ... ┃ * ┃ ┃ * ┗━┓ ┏━┛ * ┃ ┃ Code is far away from bug with the animal protecting * ┃ ┃ 神兽保佑,代码无bug * ┃ ┃ * ┃ ┃ * ┃ ┃ * ┃ ┃ * ┃ ┗━━━┓ * ┃ ┣┓ * ┃ ┏┛ * ┗┓┓┏━┳┓┏┛ * ┃┫┫ ┃┫┫ * ┗┻┛ ┗┻┛ */ #include <bits/stdc++.h> #include <iostream> using namespace std; #define ll long long const int maxn=5e5+5; const int maxn1=(int)sqrt(maxn)+1; int a[maxn],b[maxn]; set<int> s; set<int>::iterator it; int main() std::ios::sync_with_stdio (false); int n,x,y,m,flag=1; cin>>x>>y; for(int i=1; i<=y; ++i) cin>>a[i]>>b[i]; //第一种情况 for(int i=2; i<=y; ++i) if(a[i]!=a[1]&&b[i]!=a[1])//在不含x的实数对中找y if(s.empty()) s.insert(a[i]),s.insert(b[i]); else //cout<<i<<" "<<s.count(a[i])<<" "<<s.count(b[i])<<endl; //cout<<endl; if(s.count(a[i])&&s.count(b[i])) continue; else if(s.count(a[i])) for(it=s.begin(); it!=s.end(); ++it) if(*it!=a[i]) s.erase(it); break; else if(s.count(b[i])) for(it=s.begin(); it!=s.end(); ++it) if(*it!=b[i]) s.erase(it); break; else flag=0; break; if(flag) cout<<"YES"; return 0; //第二种情况 s.clear(),flag=1; for(int i=2; i<=y; ++i) if(a[i]!=b[1]&&b[i]!=b[1])//在不含x的实数对中找y if(s.empty()) s.insert(a[i]),s.insert(b[i]); else if(s.count(a[i])&&s.count(b[i])) continue; else if(s.count(a[i])) for(it=s.begin(); it!=s.end(); ++it) if(*it!=a[i]) s.erase(it); break; else if(s.count(b[i])) for(it=s.begin(); it!=s.end(); ++it) if(*it!=b[i]) s.erase(it); break; else flag=0; break; if(flag) cout<<"YES"; return 0; else cout<<"NO"; return 0;
题意:通过n次操作是序列不递减,操作:对可以对序列中的任意个数ai ---> ai=(ai+1)mod m;
看题解才知道的,对操作数二分,找出最小满足条件的序列即可,太强了qwq,注意条件的判断
对操作数二分,太神奇了。
a:不知道做,有想法,没办法,
b:按要求结果暴力啊
a:超时了qwq
b:神马,超时,暴力+二分啊
qwq
/** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ * ┃ ━ ┃ * ┃ > < ┃ * ┃ ┃ * ┃... ⌒ ... ┃ * ┃ ┃ * ┗━┓ ┏━┛ * ┃ ┃ Code is far away from bug with the animal protecting * ┃ ┃ 神兽保佑,代码无bug * ┃ ┃ * ┃ ┃ * ┃ ┃ * ┃ ┃ * ┃ ┗━━━┓ * ┃ ┣┓ * ┃ ┏┛ * ┗┓┓┏━┳┓┏┛ * ┃┫┫ ┃┫┫ * ┗┻┛ ┗┻┛ */ #include <bits/stdc++.h> #include <iostream> using namespace std; #define ll long long const int maxn=5e5+5; const int maxn1=(int)sqrt(maxn)+1; int a[maxn],b[maxn],low[maxn]; set<int> s; set<int>::iterator it; int n,m; bool check(int k) memset(low,0,sizeof(low)); for(int i=1; i<=n; ++i) if(low[i-1]==a[i]) low[i]=low[i-1]; continue; int tmp=(a[i]+k)%m; if((a[i]<low[i-1]&&tmp>=a[i]&&tmp<low[i-1])) return false; if((a[i]>low[i-1]&&(tmp>=a[i]||tmp<low[i-1]))) low[i]=a[i]; else low[i]=low[i-1]; //cout<<i<<" "<<low[i]<<endl; return true; int main() std::ios::sync_with_stdio (false); int flag=1; cin>>n>>m; for(int i=1; i<=n; ++i) cin>>a[i]; int l=0,r=m; int ans=0; while(l<=r) //cout<<l<<" "<<r<<" "<<ans<<endl; int mid=(l+r)>>1; if(check(mid)) ans=mid; r=mid-1; else l=mid+1; cout<<ans<<endl; return 0;
wa声一遍,写出来了再来写
思路清晰,在纸上模了一遍,写代码时,就会少一些bug
以上是关于Codeforces Round #562 (Div. 2)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #562 (Div. 2) A题 Circle Metro
Codeforces Round #436 E. Fire(背包dp+输出路径)
[ACM]Codeforces Round #534 (Div. 2)
Codeforces Round #726 (Div. 2) B. Bad Boy(贪心)