A - Maximize the Last Element
void solve() {
int n;cin>>n;
vector<int>a(n+1);
int ans=0;
for(int i=1;i<=n;i++){
cin>>a[i];
if(((i-1)%2==0)&&((n-i)%2==0)){
ans=max(a[i],ans);
}
}
cout<<ans<<endl;
}
B - AND Reconstruction
由于a2即和a1按位与得到b1,也和a3按位与得到b2,所以a2实际上需要有b1和b2所有位数上的1,也就是等于这两个数的或,a1和an比较特殊,可以直接变成b1和bn-1,这样操作一下看是否等于b数组即可
void solve() {
int n;cin>>n;
vector<int>a(n+1),b(n+1);
for (int i = 1; i<n; i++) cin>>b[i];
b[0] = b[n] = 0;
for (int i = 1; i <= n; i++)
a[i] = b[i - 1] | b[i];
int ok=1;
for (int i = 1; i<n; i++)
if ((a[i] & a[i + 1]) != b[i]) {
ok = 0;
break;
}
if (ok) {
for (int i = 1; i <= n; i++)
cout<<a[i]<< ' ';
} else{
cout<<-1;
}
cout<<endl;
}
C - Absolute Zero
首先判断不成立的条件,奇偶性不同的两个数减去相同的x后,得到的数的绝对值奇偶性必然不同,(这个很好证明,只需要枚举一下所有可能的情况即可)所以我们是没法让既存在奇数和偶数的数组置为0
观察操作特性,每次选定一个数x,使得所有的a[i]都等于abs(a[i]-x),就相当于找到一个数x,并将所有的数的值改为与x的距离差的绝对值,可以想到用数组的最大最小的均值去不断缩小整个数组
void solve(){
int n;cin>>n;
vector<int>a(n);
for(int i=0;i<n;i++) cin>>a[i];
for(int i=1;i<n;i++){
if(a[i]%2!=a[0]%2){
cout<<-1<<endl;
return;
}
}
数学联邦政治世界观提示您:看后求收藏(同人小说网http://tongren.me),接着再看更方便。