uva 1567 - A simple stone game(K倍动态减法游戏)

题目链接:uva 1567 - A simple stone game

题目大意:给定K和N,表示一堆石子有N个,先手第一次可以取1~N-1个石子,取到最后一个石子的人胜利,单词每次操作时,取的石子数不能超过对手上一次取的石子数m的K倍。问先手是否可以必胜,可以输出最小的首次操作。

解题思路:这题想了一天,又是打表找规律,又是推公式的,楞是做不出来,后来在网上找到了一篇题解,将的很清楚,解题宝典

/*******************
 * K倍动态减法游戏
 * 参考:http://www.cnblogs.com/jianglangcaijin/archive/2012/12/19/2825539.html
*******************/

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
const int maxn = 1e6+5;

int N, K, a[maxn], b[maxn];

int main () {
    int cas;
    scanf("%d", &cas);
    for (int i = 1; i <= cas; i++) {
        scanf("%d%d", &N, &K);
        int p = 0, q = 0;
        a[0] = b[0] = 0;
        while (a[p] < N) {
            a[p+1] = b[p] + 1;
            p++;

            while (a[q + 1] * K < a[p])
                q++;
            b[p] = b[q] + a[p];
        }

        printf("Case %d: ", i);
        if (N == a[p])
            printf("lose\n");
        else {
            int ans;
            while (N) {
                if (N >= a[p]) {
                    N -= a[p];
                    ans = a[p];
                }
                p--;
            }
            printf("%d\n", ans);
        }
    }
    return 0;
}

uva 1567 - A simple stone game(K倍动态减法游戏)

时间: 2024-10-12 20:31:23

uva 1567 - A simple stone game(K倍动态减法游戏)的相关文章

ZOJ 3599 K倍动态减法游戏

下面的文字辅助理解来自http://blog.csdn.net/tbl_123/article/details/24884861 博弈论中的 K倍动态减法游戏,难度较大,参看了好多资料才懵懂! 此题可以看作 Fibonacci 博弈的扩展,建议没弄懂 Fibonacci博弈的先学那个,个人整理 http://blog.csdn.net/tbl_123/article/details/24033245 : 而说扩展体现在数列不再是Fib数列,是根据 k 的值自行构造的,其它换汤不换药,具体构造方法

HDUOJ--------A simple stone game(尼姆博弈扩展)(2008北京现场赛A题)

A simple stone game                                                                                                       Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)                                             

uva 1378 - A Funny Stone Game(组合游戏)

题目链接:uva 1378 - A Funny Stone Game 题目大意:两个人玩游戏,对于一个序列,轮流操作,每次选中序列中的i,j,k三个位置要求i<j≤k,然后arr[i]减1,相应的arr[j]和arr[k]加1,不能操作的人输,问先手是否必胜,必胜的话给出字典序最下的必胜方案,负责输出-1. 解题思路:首先预处理出各个位置上的SG值,然后对于给定序列,枚举位置转移状态后判断是否为必败态即可. #include <cstdio> #include <cstring&g

UVA 1378 - A Funny Stone Game(博弈)

UVA 1378 - A Funny Stone Game 题目链接 题意:给定n堆石头,然后每次能选i, j, k,3堆(i < j <= k),然后从i中哦功能拿一堆出来,往另外两堆放一个进去,最后不能取的输,问先手能否必胜,如果能,输出开始选的3堆 思路:组合游戏,需要转化,把石子一字排开,最后肯定都归到n堆上,n堆是不能取的,所以假设每个石子代表一堆,从左往右分别是n - 1, n - 2, n - 3 ... 2, 1, 0,然后每次取一个加两个,就相当于取掉一堆,多上两堆,这样就转

A Simple Stone Game-找素因子(欧拉函数)-2017中国大学生程序设计竞赛-哈尔滨站-重现赛

A Simple Stone Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 0    Accepted Submission(s): 0 Problem Description After he has learned how to play Nim game, Bob begins to try another ston

2017中国大学生程序设计竞赛-哈尔滨站 H - A Simple Stone Game

A Simple Stone Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1526    Accepted Submission(s): 346 Problem Description After he has learned how to play Nim game, Bob begins to try another

uva 327 - Evaluating Simple C Expressions

 Evaluating Simple C Expressions  The task in this problem is to evaluate a sequence of simple C expressions, buy you need not know C to solve the problem! Each of the expressions will appear on a line by itself and will contain no more than 110 char

UVA - 12335 Lexicographic Order (第k大排列)

Description A Lexicographic Order Input: Standard Input Output: Standard Output The alphabet of a certain alien language consists of n distinct symbols. The symbols are like the letters of English alphabet but their ordering is different. You want to

【题集】k倍区间(抽屉原理)

例1:http://lx.lanqiao.cn/problem.page?gpid=T444 蓝桥杯 问题描述 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间. 你能求出数列中总共有多少个K倍区间吗? 输入格式 第一行包含两个整数N和K.(1 <= N, K <= 100000) 以下N行每行包含一个整数Ai.(1 <= Ai <= 10000