[cf] Codeforces Round #794 (Div. 2) A-C
前言
熬夜掉分
A.
题意 : 给定你一个数组,询问是否可以通过有限次操作,使得数组的值相同
操作定义如下 : 选择数组中 ( n − 1 ) (n-1) (n−1)个数,将选中的每个数变为这些数的平均数(不进行取整操作)
思路:
证明不来
code :
int a[N]; int n; void solve(){ cin>>n; int sum = 0 ; for(int i=1;i<=n;i++) cin>>a[i],sum+=a[i]; for(int i=1;i<=n;i++){ int t = (sum - a[i])/(n-1); if(t*(n-1) != sum - a[i] ) continue; if(t == a[i]){ //cout<<t<<" "<<a[i]<<endl; cout<<"YES"<<endl; return; } } cout<<"NO"<<endl; }
B.
题意 :
思路 :
code :
int n; int a[N]; void solve(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; int res = 0 ; for(int i=2;i<=n;){ if(a[i] < a[i-1]){ ++res; i+=2; }else i ++ ; } cout<<res<<endl; }
C.
题意 :
思路 :
code :
int n; int a[N]; int ans[N]; void solve(){ cin>>n; for(int i = 1;i<=n;i++ ) cin>>a[i]; sort(a+1,a+1+n); int k = 0; for(int i = 1,j = n/2+1 ; i<=n/2; i ++ , j ++ ){ ans[++k] = a[i]; ans[++k] = a[j]; } if(n&1){ cout<<"NO"<<endl; return; } //b[0] = b[k] //b[k+1] = b[1] ans[0] = ans[k]; ans[k+1] = ans[1]; for(int i = 1 ; i <= k ; i++ ){ if(ans[i] > ans[i-1] && ans[i] > ans[i+1]) continue; if(ans[i] < ans[i-1] && ans[i] < ans[i+1]) continue; cout<<"NO"<<endl; return; } cout<<"YES"<<endl; for(int i=1;i<=n;i++) cout<<ans[i]<<" "; cout<<endl; }