HDU 1729(石子)
题目链接
题意
一共有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(石子)相关推荐
- 【博弈论】博弈论题单题解
会不断更新的(咕咕咕) 题目难度大致满足非降性 博弈论真是深坑啊,填不动了,还有Nim积.Every-SG游戏等等等等很多题型还不会,先去学别的了 涉及知识: SG函数及SG定理:传送门 博弈论知识总 ...
- 杭电OJ分类题目(3)
原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(3) HDU Computational Ge ...
- 【hdu 1527】取石子游戏
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s) ...
- HDU 2516 取石子游戏 斐波纳契博弈
斐波纳契博弈: 有一堆个数为n的石子,游戏双方轮流取石子,满足: 1)先手不能在第一次把所有的石子取完: 2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍) ...
- HDU - 2176 取(m堆)石子游戏(尼姆博奕)
题目链接:点击查看 题目大意:给出m堆石子,规则是尼姆博弈的规则,问先手必胜还是必败,若能必胜则第一次有多少种方式取石子 题目分析:这个题目是因为一开始知道尼姆博弈的结论,需要异或所有石子来判断的,然 ...
- HDU - 1527 取石子游戏(威佐夫博弈)
题目链接:点击查看 题目大意:有两堆石子,两个人轮流取,每次可以取一堆中任意多的石子,或者取两堆中数量相同的石子,先将石子取完者获胜,若先手获胜输出1,后手获胜输出0 题目分析:这个题目涉及到了威佐夫 ...
- HDU 2516 (Fabonacci Nim) 取石子游戏
这道题的结论就是,石子的个数为斐波那契数列某一项的时候,先手必败:否则,先手必胜. 结论很简单,但是证明却不是特别容易.找了好几篇博客,发现不一样的也就两篇,但是这两篇给的证明感觉证得不清不楚的,没看 ...
- 【HDU - 1527】【POJ - 1067】取石子游戏 (威佐夫博弈)
题干: 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者 ...
- 【HDU - 2516 】取石子游戏 (Fibonacci博弈)
题干: 1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍.取完者胜.先取者负输出"Second win".先取者胜 ...
最新文章
- torch拼接合并 cat优化记录
- python基础知识整理-Python 重点知识整理(基于Python学习手册第四版)
- Android Wifi 启动过程,AndroidP wifi启动流程
- web前端入门学习 html5(2)
- BZOJ 2731 Luogu P3219 [HNOI2012]三角形覆盖问题 (扫描线)
- 一步步创建 边栏 Gadget(二)
- js与c语言效率_JavaScript比c语言的性能差了多少?
- 2019-2020年中国小吃产业发展报告
- 太大如何翻页固定表头_外行学 Python 爬虫 第六篇 动态翻页
- C程序设计语言现代方法08:数组
- 六句话,看完新造车的2021
- 指南针经纬度分秒格式转换10进制经纬度
- php表格中的caption,HTML中的caption属性是什么意思?caption标签在HTML中的用法(附实例)...
- iPhone密码管理
- Java并发编程之ThreadPoolExecutor源码解析
- 三维坐标要建一个4*4的矩阵?
- 计算机指令exec,2.1.3 使用jexec工具管理jail虚拟机
- Marvell 交换芯片DSA(分布式交换架构)功能介绍
- error: src refspec XXX matches more than one
- 朗强:画面分割器投影拼接设备与原理
热门文章
- git 使用详解(3)—— 最基本命令 + .gitignore 文件
- android studio连接真机问题
- Apache添加mod_rewrite模块
- 安卓下的免费离线地图导航软件(老虎地图)测试及网盘下载
- oracle段管理方式设为自动,oracle自动段管理ASSM笔记
- [安全攻防进阶篇] 一.什么是逆向分析、逆向分析应用及经典扫雷游戏逆向
- 【python数据挖掘课程】二十.KNN最近邻分类算法分析详解及平衡秤TXT数据集读取
- Git之深入解析如何贮藏工作分支与清理工作目录
- OpenGL之利用矩阵的“平移”“旋转”“综合变换”等实现矩形的移动
- 【Qt】modbus之串口模式读操作