码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-08-09 00:20:07      阅读:352      评论:0      收藏:0      [点我收藏+]

标签:style   http   color   os   io   for   ar   line   

题目链接:uva 1378 - A Funny Stone Game

题目大意;两个人玩游戏,对于一个序列,轮流操作,每次选中序列中的ijk三个位置要求i<jk,然后arr[i]减1,相应的arr[j]和arr[k]加1,不能操作的人输,问先手是否必胜,必胜的话给出字典序最下的必胜方案,负责输出-1.

解题思路:首先预处理出各个位置上的SG值,然后对于给定序列,枚举位置转移状态后判断是否为必败态即可。

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

using namespace std;
const int maxn = 30;

int n, g[maxn], s[maxn];

int SG (int l) {
    int vis[1000];
    memset(vis, 0, sizeof(vis));

    for (int i = 0; i < l; i++) {
        for (int j = 0; j < l; j++)
            vis[g[i]^g[j]] = 1;
    }

    int ret = -1;
    while (vis[++ret]);
    return ret;
}

void init () {
    g[0] = 0;
    for (int i = 1; i < maxn; i++)
        g[i] = SG(i);
}

int judge () {
    int ret = 0;
    for (int i = 0; i < n-1; i++) {
        if (s[i]&1)
            ret ^= g[n-1-i];
    }
    return ret;
}

void put_ans () {
    for (int i = 0; i < n-1; i++) {
        if (s[i] == 0)
            continue;

        s[i]--;
        for (int j = i+1; j < n; j++) {
            s[j]++;
            for (int k = j; k < n; k++) {
                s[k]++;
                if (judge() == 0) {
                    printf(" %d %d %d\n", i, j, k);
                    return;
                }
                s[k]--;
            }
            s[j]--;
        }
        s[i]++;
    }
}

int main () {
    init();
    int cas = 1;
    while (scanf("%d", &n) == 1 && n) {
        for (int i = 0; i < n; i++)
            scanf("%d", &s[i]);

        printf("Game %d:", cas++);
        if (judge())
            put_ans();
        else
            printf(" -1 -1 -1\n");
    }
    return 0;
}

uva 1378 - A Funny Stone Game(组合游戏),布布扣,bubuko.com

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

标签:style   http   color   os   io   for   ar   line   

原文地址:http://blog.csdn.net/keshuai19940722/article/details/38445461

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!