前言
传送门 :
熬夜掉分
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;
}