A. green_gold_dog, array and permutation
首先可以把数组从大到小排序,然后让他们的小数对应排列的大数就是答案。
void solve(){
int n;cin>>n;
vector<pii>a(n);
for(int i=0;i<n;i++)
cin>>a[i].x,a[i].y=i;
vector<int>ans(n);
sort(a.begin(),a.end());
int cnt=n;
for(int i=0;i<n;i++){
ans[a[i].y]=cnt--;
}
for(int i=0;i<n;i++)
cout<<ans[i]<<' ';
cout<<endl;
}
B. XOR Palindromes
我们分一下类,奇数长度和偶数长度;
奇数长度:中间的那个无论是怎样都不用管,可以异或1也可以异或0,然后就是看s[i]和s[n-i-1]两个对称的字符,是否相同,相同的话那么两个位置可以同时异或1,如果不相同,那么肯定有一个位置异或1,一个位置异或0.
偶数长度:不用考虑中间的,同奇数长度一样。
void solve(){
int n;cin>>n;
string s;cin>>s;
string ans(n+1,'0');
int l=0,r=0;
for(int i=0;i<n/2;i++){
if(s[i]==s[n-i-1])r+=2;
else r++,l++;
}
for(int i=l;i<=r;i+=2){
ans[i]='1';
if(n%2)ans[i+1]='1';
}
cout<<ans<<endl;
}
C. Salyg1n and the MEX Game
一道交互题
我们最开始可以输出数组的mex(最小的不存在的自然数),然后就是输入什么我们就输出什么,直到出现-1.
#include<bits/stdc++.h>
using namespace std;
int a[100010];
int main()
{
int t;
cin>>t;
while(t--){
int n,i,j,x,y=0;
cin>>n;
x=n;
for(i=0;i<n;i++){
cin>>a[i];
if(a[i]!=i)x=min(x,i);
}
while(y!=-1){
cout<<x<<endl;
cin>>y;
x=y;
}
}
return 0;
}
D. Cyclic Operations (待补中)
不是很会。。。。。。。。