UVA 11249 - Game

题目链接

题意:两堆石头。a和b。每次能取一堆随意数量,或者两堆同一时候取。可是绝对值差不能超过k,最后不能取的人输,问先手能否赢

思路:先如果(a, b)石子,a是少的一堆。首先非常easy看出(1, k + 2)是必败的,设下一个是(2, x)那么如果这个状态能到(1, k + 2)那么就是必胜,要找出(2, x)必败状态,就必定是上个状态多的一堆石子 + k + 2 - 1。这样不管怎么取。都无法变成(1, k + 2),而后手因为先手取掉了一个,就能够了,因此能够这样一个个去预处理出10W的必败状态。然后每次询问直接推断就可以

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int N = 100005; int t, k, q, a, b;
int lose[N]; void init(int k) {
memset(lose, 0, sizeof(lose));
lose[1] = 1 + k + 1;
lose[1 + k + 1] = 1;
int pre = 1;
for (int i = 2; i <= 100000; i++) {
if (lose[i]) continue;
int tmp = lose[pre] + i - pre + k + 1;
if (tmp > 100000) break;
pre = i;
lose[i] = tmp;
lose[tmp] = i;
}
} int main() {
scanf("%d", &t);
while (t--) {
scanf("%d%d", &k, &q);
init(k);
while (q--) {
scanf("%d%d", &a, &b);
if (a > b) swap(a, b);
if (lose[a] == b) printf("LOSING\n");
else printf("WINNING\n");
}
printf("\n");
}
return 0;
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

UVA 11249 - Game(游戏)的更多相关文章

  1. UVa 489 刽子手游戏

    游戏规则,计算机想一个单词让你猜,你每次可以猜一个字母,如果单词里有那个字母,所有该字母都会显示出来,如果没有那个字母则计算机会在一副"刽子手"画上填一笔,这幅画一共需要7笔就能完 ...

  2. UVa 127 纸牌游戏(栈)

    https://vjudge.net/problem/UVA-127 题意: 按从左至右的顺序发牌,并摆成一行,发牌不要相互重叠.游戏中一旦出现任何一张牌与它左边的第一张或第三张“匹配”,即花色或点数 ...

  3. UVa 10891 Sum游戏

    https://vjudge.net/problem/UVA-10891 题意: 有一个长度为n的整数序列,两个游戏者A和B轮流取数,A先取.每次玩家只能从左端或者右端取任意数量个数,但不能两端都取. ...

  4. UVa 10935卡片游戏

    很简单的一个题目,就是队列的运用就可以了,就是注意一下1的时候的情况就可以了. #include<iostream> #include<queue> using namespa ...

  5. UVa 1610 聚会游戏

    https://vjudge.net/problem/UVA-1610 题意:输入一个n个字符串的集合D,找一个长度最短的字符串S,使得D中恰好有一半串小于等于S,另一半串大于S. 思路:先拍序,然后 ...

  6. UVa 1343 旋转游戏(dfs+IDA*)

    https://vjudge.net/problem/UVA-1343 题意:如图所示,一共有8个1,8个2和8个3,如何以最少的移动来使得中间8个格子都为同一个数. 思路:状态空间搜索问题. 用ID ...

  7. UVa 1637 纸牌游戏(全概率公式)

    https://vjudge.net/problem/UVA-1637 题意: 36张牌分成9堆,每堆4张牌.每次可以拿走某两堆顶部的牌,但需要点数相同.每种拿法的概率均为1/5.求成功概率. 思路: ...

  8. UVa 11489 整数游戏

    https://vjudge.net/problem/UVA-11489 题意: 给出一个数字串n,两个人轮流从中取出一个数字,要求每次取完之后剩下的数是3的倍数,不能取数者输. 思路: 要想取掉一个 ...

  9. UVA 10891 SUM游戏 DP

    刚看到这个题目不知道怎么个DP法,有点难想到 解法如下 设置dp[i][j]代表i到j这段子序列能获得的最大值,这样,枚举m=min(m,dp[i+1到j][j],dp[i][i到j-1]),m就代表 ...

随机推荐

  1. Android - 缺少NDT选项和C/C++ Build选项 问题

    缺少NDT选项和C/C++ Build选项 问题 本文地址: http://blog.csdn.net/caroline_wendy 时间: 2014.9.3 使用ADT(Android Develo ...

  2. Cannot instantiate the type List&lt;Integer&gt;

    在使用java.util.List; 的时候,把语句写成了: List<Integer> arr = new List<Integer>(); 导致错误: Cannot ins ...

  3. Linux下SVN账户密码保存设置

    Linux下用SVN进行更新等操作时,总是提示输入用户名和密码,很不方便.因此搜了下解决办法,总结如下: 打开SVN配置文件: vim /home/<user>/.subversion/c ...

  4. Set vs. Set<?>(转)

    You may know that an unbounded wildcard Set<?> can hold elements of any type, and a raw type S ...

  5. HUNNU11352:Digit Solitaire

    Problem description Despite the glorious fall colors in the midwest, there is a great deal of time t ...

  6. ssh 实体关系分析确立(ER图-实体关系图)

    比較简单的方式就是依据模仿同类产品,依据同类产品的进行模仿,表单就是一个起码要加的字段,然后依据项目须要额外添加字段. 注意:实体类之间的引用关系还须要考虑性能的影响.如:单向或是双向. 表设计: 设 ...

  7. C++0x新特性

    我是在一个帖子上摘抄的大神语录...感谢supermegaboy大神,给了详尽的解释 下文是一篇转载的Wikipedia的译文,从语言和库双方面概述了C++0x. 右值引用与转移语义 在标准C++语言 ...

  8. J2EE请求和响应—Servlet

    一.什么是Servlet? Servlet是执行Webserver上的一个特殊Java类.其特殊用途是响应client请求并做出处理.使得client与server端进行交互. 二.生命周期  Ser ...

  9. cocos2d 创建一个黑白纹理

    @interface myGrayTexture : CCTexture2D // @param exposure 曝光 +(id) textureWithFile:(NSString*) file ...

  10. C语言cgi(1)

    1Columbia Universitycs3157 – Advanced ProgrammingSummer 2014, Lab #2, 60ish pointsJune 9, 2014Follow ...