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. c#程序内存分配

    c#程序内存分配 进程可使用内存数就是操作系统给进程分配的最大地址,一般的32位操作系统提供给用户地址最大都是3g(操作系统自己保留1g),windows由于商业目的,对于个人用户只提供了2g地址,要 ...

  2. [WPF] 使用Grid与GridSplitter排版布局

    原文:[WPF] 使用Grid与GridSplitter排版布局 前言 在開發應用程式時,一個很重要的工作項目就是設計使用者介面的排版布局.WPF中所提供的Grid控制項,讓開發人員擁有將版面分割為欄 ...

  3. Java流读写

    写: package com.wjy.write; import java.io.BufferedWriter; import java.io.FileOutputStream; import jav ...

  4. 用XAML做网页!!—终结篇

    原文:用XAML做网页!!-终结篇 迄今为止的设计都很顺利,但这次就不得不接触我前面所说的非常糟糕的流文档了,但在此之前先来把标题弄好: <Border BorderBrush="#6 ...

  5. Linux渗透+SSH内网转发

    http://www.jb51.net/hack/58514.html http://blog.chinaunix.net/uid-756931-id-353243.html http://blog. ...

  6. OCP读书笔记(17) - 计划任务

    轻量级作业: 也称为持久性轻量级作业,如果当我们的数据库每秒钟需要创建.删除或修改数十个或数百个作业时,使用轻量级作业是降低开销的最佳方法 常规作业:是由oracle 11g Scheduler 所支 ...

  7. Linux中块设备驱动程序分析

    基于<Linux设备驱动程序>书中的sbull程序以对Linux块设备驱动总结分析. 開始之前先来了解这个块设备中的核心数据结构: struct sbull_dev {         i ...

  8. LINQ to JavaScript 源码分析

    在.net平台工作一年有余,最喜欢的应属Linq特性 在几个移动端web小项目过程中,前端需要对json对象集合进行比较复杂的操作,为提高开发效率,引入了LINQ to Javascript,该项目地 ...

  9. Oracle SQL Lesson (1) - 使用SQL Select语句获取数据

    第一节课: 启动数据库并且使用特定用户连接:su - oracle; 启动sqlplus并且使用sys连接:conn / as sysdba; 启动数据库:startup; 解锁用户:alter us ...

  10. HDU1028Ignatius and the Princess III母函数入门

    这个题也能够用递归加记忆化搜索来A,只是因为这题比較简单,所以用来做母函数的入门题比較合适 以展开后的x4为例,其系数为4,即4拆分成1.2.3之和的拆分数为4: 即 :4=1+1+1+1=1+1+2 ...