题目:http://acm.hdu.edu.cn/showproblem.php?pid=1729

思路:理解错题目了,以为SG模板直接套就行了。后来队友说了那个ci是不断变化的。那么每次可以放的石头数量也是不断变化的。但是按照自己的思路改了改模板,(TLE),最后看了题解理解了一下。

看了网上好多题解,有一点想法了:题解都是找到一个q,使得

q+q*q < si && (q+1) + (q+1)*(q+1) >= si --------------------------------------------------(****)

如果 ci > q, 先收获胜 返回si - ci。如果ci < q, 则递归SG(q, ci),

为什么找这样的q呢?为什么这样判断呢?

倒着推理,假如我玩这个游戏,我先找到q,使得(****)成立,然后判断ci和q的关系

如果q < ci, 也就是 ci >= (q+1), 那么我就能放满,先手获胜 返回si-ci 。因为GS(si,si) = 0,(空间size大小为S,begin为S,谁都不能放,先手败)必败状态,GS(si, si-1)的后继只有GS(si, si) ,所以GS(si, si-1) = 1, 同理 GS(si, si-2) = 2 , GS(si, ci) = si - ci;

如果q = ci, 肯定是必败的。我这次放不满,但是下次的肯定能放满(注意(***)

如果ci < q, 不能确定状态,所以要递归SG(q, ci)。

多想想应该就理解了

AC代码:

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <algorithm>
#include <sstream>
#include <stack>
using namespace std;
#define in freopen("in.txt", "r", stdin);
typedef long long ll;
const int inf = 0x3f3f3f3f; int SG(int si, int ci) {
int q = sqrt((double) si);
while(q+q*q >= si) q--;//找到刚好使 q+q*q < si && (q+1)+(q+1)*(q+1) >= si
if(ci > q) // 先手获胜
return si - ci;
else //无法判断,递归
return SG(q, ci);
} int main() {
//in;
int n, si, ci;
int j = 1;
while(~scanf("%d", &n) && n) {
int sum = 0;
while(n--) {
scanf("%d %d", &si, &ci);
sum ^= SG(si, ci);
}
printf("Case %d:\n", j++);
if(sum)//原来这里写反了 很郁闷
printf("Yes\n");
else
printf("No\n");
}
}

最新文章

  1. ModernUI教程:目录 (完结)
  2. 点击劫持(CLICKJACKING)与X-FRAME-OPTIONS HEADER
  3. yar
  4. win7打开或关闭windows功能 提示“出现错误,并非所有的功能被更改”,管理员权限惹的祸
  5. 保障MySQL安全的14个最佳方法
  6. javascript数组去重算法-----5
  7. 【01背包】HDU 1171 Big Event in HDU
  8. (转)Spring boot——logback.xml 配置详解(三)&lt;appender&gt;
  9. 给dalao们递dalao们的博客
  10. R语言学习——图形初阶之散点图
  11. 利用data属性来存json、和取数据还原json
  12. 小程序开发:canvas在画布上滑动,页面跟着滑动问题
  13. WeexSDK源码分析(iOS)
  14. 记Git报错-refusing to merge unrelated histories
  15. UVa 11997 K Smallest Sums - 优先队列
  16. golang database sql DSN (Data Source Name)中的timeout, readTimeout
  17. 51nod 1412 AVL树的种类(经典dp)
  18. druid数据源
  19. loadrunner 测试问题汇总
  20. 牛客练习赛19 D-托米去购物

热门文章

  1. hdu--2111--Saving HDU(贪心)
  2. 前端多媒体(7)—— 在浏览器中实现rtmp推流
  3. 关于C++多态的理解
  4. C++中抽象类和多继承
  5. 【leetcode刷题笔记】Minimum Depth of Binary Tree
  6. ffmpeg解码RTSP/TCP视频流H.264(QT界面显示视频画面)
  7. 雅礼集训 2017 Day2 水箱 可并堆
  8. 【ML】关于神经网络优化问题的随笔记
  9. 检测 iOS 的 APP 性能的一些方法
  10. POJ 1042 Gone Fishing( DP )