A.如果不是回文那么需要两次
#include<bits/stdc++.h>
using namespace std;
void solve(){
int n,k;cin>>n>>k;
string s;bool ok=0;
cin>>s;string ss;
ss=s;
reverse(ss.begin(),ss.end());
for(int i=0;i<s.size()-1;i++){
if(s[i]!=s[i+1])ok=1;
}
if(s==ss)cout<<1<<endl;
else if(k==0)cout<<1<<endl;
else {
if(!ok)cout<<1<<endl;
else cout<<2<<endl;
}
}
int main(){
int t;cin>>t;
while(t--){
solve();
}
}
B. 无论是操作1还是操作二都不会改变奇偶性 所以只需判断操作后的奇偶性与y是否相同即可
#include<bits/stdc++.h>
using namespace std;
void solve(){
long long n,x,y;cin>>n>>x>>y;
for(int i=1;i<=n;i++){
int c;cin>>c;
x+=c;
}
if((x&1)==(y&1))cout<<"Alice"<<'\n';
else cout<<"Bob"<<'\n';
}
int main(){
int t;cin>>t;
while(t--){
solve();
}
}
C.构造 因为平均值是整数 所以行数n必须是偶数 然后构造出等差数列即可
#include<bits/stdc++.h>
using namespace std;
void solve(){
int n,k;cin>>n>>k;
if(n&1&&k!=1){
cout<<"NO"<<'\n';
return ;
}
cout<<"YES"<<'\n';
int a[2]={2,1};
for(int i=1;i<=n;i++){
for(int j=1;j<=k;j++){
cout<<a[i%2]<<" ";
a[i%2]+=2;
}
cout<<'\n';
}
}
int main(){
int t;cin>>t;
while(t--){
solve();
}
}
D. 交互 太难了 嘤嘤嘤 以后有机会再补(哭唧唧)