题解:P15052 [UOI 2023 II Stage] Memory training
liuyingszy · · 题解
本题作为黄题还是太水了
题意简述
一个数组,每轮当前玩家取走一个数,并报出剩余的数。已知初始数组和每一轮报出的数组,求两人分别取得的数。
解题思路
利用每次取数后,数组总和的变化来求每次被取走的数。
代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
int a[2026];
int sum,sum1;//用于取差
int ans1[2026],ans2[2026];
int cnt1,cnt2;//记录两组取的数的个数
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
sum+=a[i];
}
sum1=sum;
for(int i=1;i<n;i++){
sum=0;
for(int j=1;j<=n-i;j++){
int x;
cin>>x;
sum+=x;
}
if(i%2==1){
cnt1++;
ans1[cnt1]=sum1-sum;
}else{
cnt2++;
ans2[cnt2]=sum1-sum;
}
sum1=sum;//更新剩余数的和
}
//特判最后一个数
if(n%2==1){
cnt1++;
ans1[cnt1]=sum1;
}else{
cnt2++;
ans2[cnt2]=sum1;
}
//从小到大排序
sort(ans1+1,ans1+cnt1+1);
sort(ans2+1,ans2+cnt2+1);
//快乐地输出
for(int i=1;i<=cnt1;i++){
cout<<ans1[i]<<" ";
}
cout<<"\n";
for(int i=1;i<=cnt2;i++){
cout<<ans2[i]<<" ";
}
return 0;
}
完结撒花QAQ