P7939题解
思路
直接模拟,对于每组测试数据,分别调整 A 队前 n 个人和 B 队后 n 个人,得分最大值当然是 \(2n\)。
例如在第一组数据中,A 队和 B 队四个人都分别出石头和剪刀,那么我们可以把 A 队第一个人调整为布,再把 B 队第二个人调整为布。所以最后的得分就是 4。
代码
模拟思路即可
#include<bits/stdc++.h>
using namespace std;
int a[200010],b[200010];
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
for(int i=1;i<=2*n;i++) cin>>a[i];
for(int i=1;i<=2*n;i++) cin>>b[i];
cout<<2*n<<endl;
for(int i=1;i<=n;i++){//调整 A 队前 n 个人
if(b[i]==1) a[i]=3;
if(b[i]==2) a[i]=1;
if(b[i]==3) a[i]=2;
}
for(int i=1;i<=2*n;i++) cout<<a[i]<<" ";
cout<<endl;//别忘了换行
for(int i=n+1;i<=2*n;i++){//调整 B 队后 n 个人
if(a[i]==1) b[i]=2;
if(a[i]==2) b[i]=3;
if(a[i]==3) b[i]=1;
}
for(int i=1;i<=2*n;i++) cout<<b[i]<<" ";
cout<<endl;
}
}

浙公网安备 33010602011771号