1 条题解
-
0
如果执着于回文那肯定不好做,于是就注意到特殊性质1
换句话说,顺序不重要
考虑特殊性质1
当 时,如果两个数一样那就小Y赢,否则小Y输。
当 时
- 如果四个数都一样,小Y输;
- 三个数一样一个数不一样,无论小Y删那个数,只要小H删掉不一样的数,小Y输
- 两个数两个数一样,小H可以跟着小H删数,小Y输
- 两个数一样两个数不一样,小Y把一样的两个数删掉一个,小Y赢 -四个数都不一样,小Y赢
代码很简单,此处略去。
考虑特殊性质2
假设 那么
序列中最多只有两种不同的数,那么如果两种数出现次数都是偶数,那么小Y删什么数小H就删什么数,最后剩下来两个数一定一样
序列中最多只有两种不同的数,那么如果两种数出现次数都是奇数,那么小Y删一个数那个数出现次数就变成奇数,小H删另外一个数,就变成了前面的情况
综上所述,当 情况同特殊性质1;否则小Y一定输。
考虑全部测试数据
由前面的两个特殊性质,不难发现:只要最后两个数字不一样,就小Y赢;否则小Y输。
那小Y直接把重复的数字删掉,也就是“去重”,不久行了?
小H最后既然要保证最后两个数字一样,就不会对小Y的“去重”产生贡献。
小Y一共可以做 次操作。
于是就可以统计去重后序列中数的个数 ,如果 则小Y赢;否则()则小Y输,用 set 做比较方便。
最后注意多测要清空。
AC代码
#include<bits/stdc++.h> using namespace std; const int N=1e5+5; int n,x; set<int>s; void solve() { s.clear();cin>>n; for(int i=1;i<=2*n;++i)cin>>x,s.insert(x); puts(s.size()<=n?"Lose":"Win"); return; } signed main() { int _;cin>>_; while(_--)solve(); return 0; }
- 1
信息
- ID
- 953
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 9
- 已通过
- 5
- 上传者