题目链接

题意

一共有n个箱子,每个箱子容量为S,当前的石子为C。每次想一个箱子放石子,放的数量不能超过当前石子数的平方,谁先放完谁赢。

AC

SG函数

  • 当C == S 时,sg(S, C) = 0
  • 当C > T 时,假设T为当前最大的必败点,则T满足 T + T * T < S, (T + 1) + (T + 1) * (T + 1) >= S
    sg(S, C) = mex(sg(S, C + 1), sg(S, C + 2) …… sg(S, S - 1), sg(S, S)) = S - C
    证明:sg(S, S) = 0, sg(S, S - 1) = mex(sg(S, S)) = 1 ………
  • 当C <= T,此时sg(S, C) = sg(T, C),递归求sg
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <vector>
#include <map>
#include <string.h>
#include <cmath>
#include <algorithm>
#define N 100005
#define P pair<int,int>
#define mk(a, b) make_pair(a, b)
#define mem(a, b) memset(a, b, sizeof(a))
int inf = 0x3f3f3f3f;
#define ll long long
using namespace std;
int get_sg(int s, int c) {// 求最大必败点int q = sqrt(s);while (q + q * q >= s)q--;if (c > q)  return s - c;else    return get_sg(q, c);
}
int main(){int Case = 1;int n;while (cin >> n, n) {int ans = 0;while (n--) {int s, c;cin >> s >> c;ans ^= get_sg(s, c);}cout << "Case " << Case++ << ":" << endl;if (ans)    cout << "Yes\n";else    cout << "No\n";}return 0;
}

HDU 1729(石子)相关推荐

  1. 【博弈论】博弈论题单题解

    会不断更新的(咕咕咕) 题目难度大致满足非降性 博弈论真是深坑啊,填不动了,还有Nim积.Every-SG游戏等等等等很多题型还不会,先去学别的了 涉及知识: SG函数及SG定理:传送门 博弈论知识总 ...

  2. 杭电OJ分类题目(3)

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(3) HDU Computational Ge ...

  3. 【hdu 1527】取石子游戏

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s) ...

  4. HDU 2516 取石子游戏 斐波纳契博弈

    斐波纳契博弈: 有一堆个数为n的石子,游戏双方轮流取石子,满足: 1)先手不能在第一次把所有的石子取完: 2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍) ...

  5. HDU - 2176 取(m堆)石子游戏(尼姆博奕)

    题目链接:点击查看 题目大意:给出m堆石子,规则是尼姆博弈的规则,问先手必胜还是必败,若能必胜则第一次有多少种方式取石子 题目分析:这个题目是因为一开始知道尼姆博弈的结论,需要异或所有石子来判断的,然 ...

  6. HDU - 1527 取石子游戏(威佐夫博弈)

    题目链接:点击查看 题目大意:有两堆石子,两个人轮流取,每次可以取一堆中任意多的石子,或者取两堆中数量相同的石子,先将石子取完者获胜,若先手获胜输出1,后手获胜输出0 题目分析:这个题目涉及到了威佐夫 ...

  7. HDU 2516 (Fabonacci Nim) 取石子游戏

    这道题的结论就是,石子的个数为斐波那契数列某一项的时候,先手必败:否则,先手必胜. 结论很简单,但是证明却不是特别容易.找了好几篇博客,发现不一样的也就两篇,但是这两篇给的证明感觉证得不清不楚的,没看 ...

  8. 【HDU - 1527】【POJ - 1067】取石子游戏 (威佐夫博弈)

    题干: 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者 ...

  9. 【HDU - 2516 】取石子游戏 (Fibonacci博弈)

    题干: 1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍.取完者胜.先取者负输出"Second win".先取者胜 ...

最新文章

  1. torch拼接合并 cat优化记录
  2. python基础知识整理-Python 重点知识整理(基于Python学习手册第四版)
  3. Android Wifi 启动过程,AndroidP wifi启动流程
  4. web前端入门学习 html5(2)
  5. BZOJ 2731 Luogu P3219 [HNOI2012]三角形覆盖问题 (扫描线)
  6. 一步步创建 边栏 Gadget(二)
  7. js与c语言效率_JavaScript比c语言的性能差了多少?
  8. 2019-2020年中国小吃产业发展报告
  9. 太大如何翻页固定表头_外行学 Python 爬虫 第六篇 动态翻页
  10. C程序设计语言现代方法08:数组
  11. 六句话,看完新造车的2021
  12. 指南针经纬度分秒格式转换10进制经纬度
  13. php表格中的caption,HTML中的caption属性是什么意思?caption标签在HTML中的用法(附实例)...
  14. iPhone密码管理
  15. Java并发编程之ThreadPoolExecutor源码解析
  16. 三维坐标要建一个4*4的矩阵?
  17. 计算机指令exec,2.1.3 使用jexec工具管理jail虚拟机
  18. Marvell 交换芯片DSA(分布式交换架构)功能介绍
  19. error: src refspec XXX matches more than one
  20. 朗强:画面分割器投影拼接设备与原理

热门文章

  1. git 使用详解(3)—— 最基本命令 + .gitignore 文件
  2. android studio连接真机问题
  3. Apache添加mod_rewrite模块
  4. 安卓下的免费离线地图导航软件(老虎地图)测试及网盘下载
  5. oracle段管理方式设为自动,oracle自动段管理ASSM笔记
  6. [安全攻防进阶篇] 一.什么是逆向分析、逆向分析应用及经典扫雷游戏逆向
  7. 【python数据挖掘课程】二十.KNN最近邻分类算法分析详解及平衡秤TXT数据集读取
  8. Git之深入解析如何贮藏工作分支与清理工作目录
  9. OpenGL之利用矩阵的“平移”“旋转”“综合变换”等实现矩形的移动
  10. 【Qt】modbus之串口模式读操作