本题是2026牛客寒假算法基础集训营2的B题
题目链接:https://ac.nowcoder.com/acm/contest/120562/B
题目大意:若干位选手拥有一个数值,然后相互PK,输的的人退出,数值一样的人同归于尽,最后活下来的人获胜。
题目分析:观察到赢得人不会退出,所以直接找最大值,如果最大值是奇数个,那么他可以将所有人都踢死,所以只有最大值可以获胜。如果是偶数个,那么最大值不可能获胜,它必定会与跟自己数值相同的人同归于尽,但他可以帮助比他弱小的人先除去其他人,最后跟与自己数值相同的人一起退出,这样只剩下了那个比最大值小的数,所以除了最大值,其他任何人都有可能获胜。
所以直接看代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e6+10;
ll a[N];
void solve(){
ll n;
cin>>n;
ll ma=-1;
for(int i=1;i<=n;i++){
cin>>a[i];
ma=max(ma,a[i]);
}
ll cnt=0;
for(int i=1;i<=n;i++){
if(a[i]==ma){
cnt++;
}
}
if(cnt%2!=0){
for(int i=1;i<=n;i++){
if(a[i]==ma){
cout<<1;
}
else{
cout<<0;
}
}
}
else{
for(int i=1;i<=n;i++){
if(a[i]==ma){
cout<<0;
}
else{
cout<<1;
}
}
}
cout<<"\n";
}
int main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int T=1;
cin>>T;
while(T--){
solve();
}
}
// 1 1 4 5 1 4
// 3 3 3 3 3
// 1 2 4 5 5
// 1 4 4 5 5
// 1 3 3 4 4 6 7

京公网安备 11010502036488号