A题---水题:
int a[105],b[105]; int main() { int n1,n2; cin>>n1; for(int i=0;i<n1;i++) cin>>a[i]; sort(a,a+n1); cin>>n2; for(int i=0;i<n2;i++) cin>>b[i]; sort(b,b+n2); cout<<a[n1-1]<<" "<<b[n2-1]<<endl; }
B题---模拟题
题意:给定n个数字(数字范围为−10^9≤ai≤10^9),每个数字可以进行原基础上的加一或减一操作,问多少次操作之后这些数字的乘积为1?
思路:
要数字乘积为1 那么这些数字必须为-1与1
所以我们需要做的是让这些数字都靠近1与-1,另外处理数字0---使他看情况变为1或-1
-3 -5 -5 -1 0 0 0 1 2
注明:这里需要处理一些细节
int main() { int n,t; cin>>n; int a=0,b=0,c=0; long long ans=0; for(int i=0;i<n;i++) { cin>>t; if(t==0) c++; else if(t>0) { a++; ans+=(t-1); } else { b++; ans+=(-1-t); } } if(c==0) { if(a==0&&b) { if(b%2==1) ans+=2; } if(a&&b) { if(b%2==1) ans+=2; } } else { ans+=c; } cout<<ans<<endl; }
C题:规律模拟题
题意:给定数字n,让你求一个环,环上有2n个数字(1,2...2n),环上形成连续的n个数字其和与其他的环上形成连续的n个数字的和相差不大于1,问是否存在这样的环,存在输出该环
思路:我们可以得出a[i]-a[i+n]=1(或者-1) 即a[i]与a[i+n]相差1
我们只需求出n对这样的数 每对数两数之间相差1 其实就是1,2 ;3,4;5,6;然后我们注意到每次都是先相差正1,然后下一组相差负1
int a[200005]; int main() { int n; cin>>n; n=2*n; int sum=n*(n+1)/2; int x=(sum+1)/2; a[1]=1,a[n]=n; if((n/2)%2==0) cout<<"NO"<<endl; else{ int t=1; for(int i=1;i<=n/2;i++) { t=2*i; if(i%2) { a[i]=t-1,a[n/2+i]=t; } else { a[i]=t,a[n/2+i]=t-1; } } cout<<"YES"<<endl; for(int i=1;i<=n;i++) { if(i!=n) cout<<a[i]<<" "; else cout<<a[i]<<endl; } } }
Codeforces Round #580 (Div. 2)
原文:https://www.cnblogs.com/Aiahtwo/p/11376541.html