• UVA 11249


    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
    ");
    	    else printf("WINNING
    ");
    	}
    	printf("
    ");
        }
        return 0;
    }


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

  • 相关阅读:
    python web 2
    python web1(解析url)
    webstrom 今天突然要激活
    数组排序 记录一下
    浏览器添加随机数去除缓存
    vue-cli 安装报错
    vue 初始化项目报错
    深拷贝和浅拷贝
    css3 属性 clip-path
    js数组去重
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4650211.html
Copyright © 2020-2023  润新知