题目传送门

题目大意

给出 \(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;
}

题解 UVA1500 Alice and Bob的更多相关文章

  1. 2016中国大学生程序设计竞赛 - 网络选拔赛 J. Alice and Bob

    Alice and Bob Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  2. ACdream 1112 Alice and Bob(素筛+博弈SG函数)

    Alice and Bob Time Limit:3000MS     Memory Limit:128000KB     64bit IO Format:%lld & %llu Submit ...

  3. 2013年山东省第四届ACM大学生程序设计竞赛 Alice and Bob

      Alice and Bob Time Limit: 1000ms   Memory limit: 65536K 题目描述 Alice and Bob like playing games very ...

  4. Alice and Bob(mutiset容器)

    Alice and Bob Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  5. 【XSY2190】Alice and Bob VI 树形DP 树剖

    题目描述 Alice和Bob正在一棵树上玩游戏.这棵树有\(n\)个结点,编号由\(1\)到\(n\).他们一共玩\(q\)盘游戏. 在第\(i\)局游戏中,Alice从结点\(a_i\)出发,Bob ...

  6. [UOJ266]Alice和Bob又在玩游戏

    [UOJ266]Alice和Bob又在玩游戏 Tags:题解 作业部落 评论地址 TAG:博弈 题意 不同于树的删边游戏,删掉一个点删去的是到根的路径 题解 这题只和计算\(SG\)有关,博弈的有关内 ...

  7. HDU 4268 Alice and Bob 贪心STL O(nlogn)

    B - Alice and Bob Time Limit:5000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u D ...

  8. Foj 2296 Alice and Bob(博弈、搜索)

    Foj 2296 Alice and Bob 题意 两个人博弈,规则如下:轮流取0~9中的数字,最后Alice所得的数字个数为1~n中,数位在Alice所取集合中出现奇数次的. 双方想获得尽量多,问A ...

  9. hdu 4111 Alice and Bob 记忆化搜索 博弈论

    Alice and Bob Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...

随机推荐

  1. 10分钟学会windows中iis搭建服务器集群实现负载均衡和nginx代理转发

    前言 我们之前聊过 10分钟搭建服务器集群--Windows7系统中nginx与IIS服务器搭建集群实现负载均衡:https://www.cnblogs.com/xiongze520/p/103087 ...

  2. OKR工作法读后感

    <OKR工作法>把管理思想融入到一则创业故事中,故事细节经过了精心的设计,融入了管理智慧和踩坑填坑经验,每个细节都以小见大,耐人寻味.一千个读者,就有一千个哈姆雷特. 所以这次我不去点评大 ...

  3. Java并发编程工具类 CountDownLatch CyclicBarrier Semaphore使用Demo

    Java并发编程工具类 CountDownLatch CyclicBarrier Semaphore使用Demo CountDownLatch countDownLatch这个类使一个线程等待其他线程 ...

  4. kubernetes 安装 ingress controller

    文章链接 ingress-nginx ingress 官方网站 ingress 仓库地址 ingress-nginx v1.0 最新版本 v1.0 适用于 Kubernetes 版本 v1.19+ ( ...

  5. Insights直播预告 | 多媒体管线服务,助您轻松进入“技术流”创新阵地

    [导读] 随着各类音视频移动应用快速发展,短视频.线上直播等娱乐方式逐渐为大众所喜爱.优质的视听效果和交互体验,往往能吸引更多的用户.多媒体管线服务作为一个轻量级的多媒体开发框架,其跨平台.高性能的多 ...

  6. Linux新加磁盘并挂载到目录

    步骤:1.分区  ----> 2.格式化  ----> 3.挂载 一.查看当前情况 1. 2. 二.磁盘分区 fdisk /dev/sdb 1.输入n,表示添加一个新的分区 2. e ex ...

  7. 装配Bean的三种方式

    一.装配Bean就是在xml写一个Bean标签:装配完Bean,还需要读取xml配置文件创建Spring容器来创建对象: 1.new 实现类方式 正常的三种创建Bean容器的方法都可以根据装配的Bea ...

  8. Apollo 配置中心详细教程

    一.简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理 ...

  9. kubectl apply部署时可以用 --record 方便记录版本 和回退

    1.部署时正常时下面的 kubectl apply -f http.yaml 2.如果修改文件文件重新部署或者之前有上一个版本的  想回退上一个的 可以无感知的回退回去 不影响业务 其中http-de ...

  10. 数据结构逆向分析-List

    数据结构逆向分析-List 首先STL中的List就是一个链表,但是肯定C++用了很多封装,所以这里我们来一探究竟. 开始 首先先写一些简单的分析的源代码: #include<iostream& ...