题目传送门

题目大意

给出 \(n\) 堆石子,每次可以做以下两种操作之一:

  • 将某两堆石子进行合并

  • 将某一堆石子抽走一个石子

问谁必胜。

思路

就nm很妙好么?

首先,我们需要考虑每堆石子大小都 \(>1\) 的情况,你发现判断条件就是判断石子总数加上堆数减一是否为奇数。因为每次合并实际上就相当于翻转先后手,然后如果两人足够聪明那么他们一定会用完合并的机会,因为如果自己当前必败就让对方走,反之对方就会让自己走。

我们再考虑存在大小 \(=1\) 的情况,你发现无非就多了几种操作:

  1. 将某两个大小为 \(1\) 的堆合并

  2. 将一个大小为 \(1\) 的堆与大堆合并

  3. 删掉一个小堆

  4. 抽掉大堆中的一个石子

然后你发现这个直接暴力记搜即可。时间复杂度 \(\Theta(n^2w)\),其中 \(w\) 是值域。

\(\texttt{Code}\)

#include <bits/stdc++.h>
using namespace std; #define Int register int
#define MAXM 50105
#define MAXN 55 template <typename T> inline void read (T &t){t = 0;char c = getchar();int f = 1;while (c < '0' || c > '9'){if (c == '-') f = -f;c = getchar();}while (c >= '0' && c <= '9'){t = (t << 3) + (t << 1) + c - '0';c = getchar();} t *= f;}
template <typename T,typename ... Args> inline void read (T &t,Args&... args){read (t);read (args...);}
template <typename T> inline void write (T x){if (x < 0){x = -x;putchar ('-');}if (x > 9) write (x / 10);putchar (x % 10 + '0');} int t,n,sg[MAXN][MAXM]; int dfs (int a,int b){
if (!a) return b & 1;
if (b == 1) return dfs (a + 1,0);
if (~sg[a][b]) return sg[a][b];
int &t = sg[a][b];
if (a && !dfs (a - 1,b)) return t = 1;
else if (a && b && !dfs (a - 1,b + 1)) return t = 1;
else if (a > 1 && !dfs (a - 2,b + 2 + (b ? 1 : 0))) return t = 1;
else if (b && !dfs (a,b - 1)) return t = 1;
else return t = 0;
} signed main(){
memset (sg,-1,sizeof (sg)),read (t);
while (t --> 0){
int sum1 = 0,sum2 = 0;
read (n);for (Int i = 1,v;i <= n;++ i) read (v),sum1 += (v == 1),(v != 1) && (sum2 += v + (sum2 ? 1 : 0));
puts (dfs (sum1,sum2) ? "YES" : "NO");
}
return 0;
}

最新文章

  1. AspNetPager 免费分页控件7.5.1版发布!
  2. 【UML】UML基础知识
  3. 消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ
  4. 轻量级应用开发之(03)UIVIew
  5. PLSQL_性能优化工具系列16_Best Practices: Proactively Avoiding Database
  6. [AFUI]App Framework Quickstart
  7. iOS后台如何保持socket长连接和数据传输
  8. C#实现给手机发送短信
  9. 小试ImageMagik——使用篇
  10. tomcat 下配置ajax 跨域 tomcat font face 跨域 java跨域
  11. 通达OA批量处理没有结束但前台显示已经结束的流程
  12. Web发展简史
  13. linux 内核假死循环导致的问题
  14. django+mysql安装和设置
  15. faster rcnn算法及源码及论文解析相关博客
  16. Ansible之迭代、模板
  17. CMS3.0——初次邂逅express
  18. Yii框架2.0的过滤器
  19. boost 编译 安装
  20. 用php命令执行php脚本报错,在浏览器里执行却正常。

热门文章

  1. 眼见为实,看看MySQL中的隐藏列!
  2. Ubuntu中添加desktop entry
  3. .Net Core 中的选项Options
  4. 开源的 Web 框架哪个快?我在 GitHub 找到了答案
  5. 面试官:Redis的事务满足原子性吗?
  6. MySQL——InnoDB事务
  7. Python习题集(十二)
  8. SQL-INSERT触发器练习
  9. uni-app 登录Abp VNexe并获取Token
  10. 计算机基础知识以及java JDK、JRE