Codeforces Round #609 题解
Posted ctyakwf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #609 题解相关的知识,希望对你有一定的参考价值。
A题
大水题,从2枚举判断素数找到一组答案即可
B题
思维题,先对b数组排序,因为我们知道肯定存在答案,所以我们只要枚举每个a[i],使得x=b[1]-a[i](在同余的情况下,具体表达看代码),然后枚举x看看哪个是符合条件并且是最小的
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<map> #include<algorithm> using namespace std; typedef long long ll; const int N=2110; int a[N],b[N],c[N]; int x[N]; int main(){ int n,m; cin>>n>>m; int i; for(i=1;i<=n;i++) cin>>a[i]; for(i=1;i<=n;i++) cin>>b[i]; sort(b+1,b+n+1); for(i=1;i<=n;i++) x[i]=(b[1]-a[i]+m)%m; int res=0x3f3f3f3f; for(i=1;i<=n;i++){ int j; for(j=1;j<=n;j++) c[j]=(a[j]+x[i])%m; sort(c+1,c+n+1); for(j=1;j<=n;j++) if(c[j]!=b[j]) break; if(j==n+1) res=min(res,x[i]); } cout<<res<<endl; }
C题
循环题目因为长度很长先看循环节,因为k后面的字符数组只被k前面的决定,而我们要找最小,首先把原始数组的前k个作为初始循环节,更新后,假如比原数组大,那么这肯定是答案。
如果比原数组小,那么我们就要考虑增大循环节并且是答案最小,那么显然只需要更改k-1这个位置也就是最后位置即可,因为这样保证更改是最小且比原数组大,注意进位判断。
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<map> #include<algorithm> using namespace std; typedef long long ll; const int N=211000; char res[N]; char s[N]; int main(){ int n,k; cin>>n>>k; cin>>s; int i; for(i=0;i<n;i++) res[i]=s[i%k]; if(strcmp(res,s)>=0){ cout<<strlen(res)<<endl; cout<<res<<endl; return 0; } int t=k-1; res[t]++; while(res[t]-‘0‘>=10){ res[t]=‘0‘; res[t-1]++; t--; } for(i=0;i<n;i++) res[i]=res[i%k]; cout<<strlen(res)<<endl; cout<<res<<endl; }
以上是关于Codeforces Round #609 题解的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #609 (Div. 2) A-E简要题解
Codeforces Round #609 (Div. 2)
Codeforces Round #609 (Div. 2)