Codeforces Round #657 (Div. 2)
A. Acacius and String
爆零!太菜了,下來終于把A題代碼調AC了
#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #include<iostream> #include<algorithm> #include<cstring> #include<string> using namespace std; int n; string res="abacaba"; int main() {IO;int T;cin>>T;while(T--){cin>>n;string s;cin>>s;int flag=0;for(int i=0;i+6<n;i++)if(s.substr(i,7)==res) flag++;if(flag>1) cout<<"No"<<endl;else if(flag==1){cout<<"Yes"<<endl;for(auto t:s){if(t=='?') cout<<'e';else cout<<t;}cout<<endl;}else{for(int i=0,j=0;i<n;i++){if(s[i]=='?'||s[i]==res[j]){j++;if(j==7){if((i+4<n&&"aba"+s.substr(i+1,4)==res)||(i>=10&&s.substr(i-10,4)+"aba"==res)){j=0;i=i-6;}else {for(int x=i-6,y=0;y<7;x++,y++) s[x]=res[y];break;}}}else{i=i-j;j=0;}}for(int i=0;i+6<n;i++)if(s.substr(i,7)==res) flag++;if(flag>1) cout<<"No"<<endl;else if(flag==1){cout<<"Yes"<<endl;for(auto t:s){if(t=='?') cout<<'e';else cout<<t;}cout<<endl;}else cout<<"No"<<endl;}}return 0; }B. Dubious Cyrpto
賽后補題瞎搞,直接AC了自己都很迷
na+b?c=mna+b-c=mna+b?c=m稍微化簡一下na=m+c?bna=m+c-bna=m+c?b,然后對于右邊一項的范圍是[m+l?r,m?l+r][m+l-r,m-l+r][m+l?r,m?l+r],即代碼中的[lmin,lmax],然后枚舉a,考慮lmina\frac{lmin}{a}almin?和lmaxa\frac{lmax}{a}almax?,如果lmina<lmaxa\frac{lmin}{a} < \frac{lmax}{a}almin?<almax?,那么由于下取整,lmaxa\frac{lmax}{a}almax?肯定能夠整除aaa,如果lmina=lmaxa\frac{lmin}{a}=\frac{lmax}{a}almin?=almax?,考慮他倆之間是否有能夠整除aaa的即可,其他情況均不能整除aaa,然后就可以知道c?bc-bc?b的差na?mna-mna?m,然后枚舉bbb,求個在范圍中的ccc輸出即可
C. Choosing flowers
貪心+枚舉+二分
首先容易證明最優解肯定只選擇一種花多次(貪心),然后先對flower[i].a降序排列,枚舉最終選擇哪一種花多次,不妨假設最后選flower[i]多次,對于其他花的a如果大于flower[i].b肯定是需要選上,因此可以二分邊界,然后分類一下就可以了。
希望今天的div2不爆零,要加油哦!
總結
以上是生活随笔為你收集整理的Codeforces Round #657 (Div. 2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win11 学院:在 Windows 1
- 下一篇: 前开发部负责人:微软放弃 Windows