https://codeforces.com/contest/1990
A博弈论(AC)
#include<bits/stdc++.h>
using namespace std;
int a[55],s[55];
void solve()
{
memset(a,0,sizeof a);
memset(s,0,sizeof s);
int n;cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
s[a[i]]++;
}
for(int i=1;i<=n;i++)
{
if(s[i]%2==1)//存在奇数,就赢
{
cout<<"YES"<<endl;
return ;
}
}
cout<<"NO"<<endl;
return ;
}
int main()
{
int t;cin>>t;
while(t--)
{
solve();
}
}
B构造(补题)
中间部分全部是1
【1 2 3…y-1 y…x x+1…n-1 n】
a[y…x]=1
a[x+1…n]=-1
如果x+1…n的个数远远大于y…x的个数,即相加后为一个大的负数,即出现最大后缀位置不是y了,因此-1,1交替出现在两端。
以何种形式出现在两端?
y-1=-1 y-2=1依次交替
x+1=-1 x+2=1依次交替
此处不懂为社么这样做。。。