题目链接:http://vjudge.net/problem/viewProblem.action?id=41555

把第i堆的每个石子看出一堆个数为n-i的石子,转换为组合游戏

#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <cstring>
using namespace std; #define N 30 int a[N],sg[N];
void cal_sg(){
int i;
sg[0]=0;
for(i=1;i<N;i++){
int vis[100];
memset(vis,0,sizeof vis);
for(int j=0;j<i;j++)
for(int k=j;k<i;k++)vis[sg[j]^sg[k]]=1;
for(int j=0;j<100;j++)if(!vis[j])
{sg[i]=j;break;}
}
}
int main(){
int n,cs=1;
cal_sg();
while(scanf("%d",&n) && n){
int i;
for(i=0;i<n;i++)scanf("%d",&a[i]);
int ans=0;
for(i=0;i<n;i++)if(a[i]&1)ans^=sg[n-i-1];
printf("Game %d: ",cs++);
if(ans==0)printf("-1 -1 -1\n");
else{
int k,j,flag=0;
for(i=0;i<n-1;i++)if(a[i]){
for(k=i+1;k<n;k++){
for(j=k;j<n;j++){
if(!(ans^sg[n-i-1]^sg[n-k-1]^sg[n-j-1]))flag=1;
if(flag)break;
}
if(flag)break;
}
if(flag)break;
}
printf("%d %d %d\n",i,k,j);
}
}
return 0;
}

uva 1378 A Funny Stone Game (博弈-SG)的更多相关文章

  1. UVa 1378 A Funny Stone Game [博弈论 SG函数]

    A Funny Stone Game 题意: $n \le 23$堆石子,每次选择$i < j \le k$,从$i$拿走1颗$j,k$各放入一颗,不能取就失败.求先手是否必胜以及第一次取的策略 ...

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

    题目链接:uva 1378 - A Funny Stone Game 题目大意:两个人玩游戏,对于一个序列,轮流操作.每次选中序列中的i,j,k三个位置要求i<j≤k,然后arr[i]减1,对应 ...

  3. Uva 1378 - A Funny Stone Game

    1378 - A Funny Stone Game Time limit: 3.000 seconds The funny stone game is coming. There are n pile ...

  4. uva 1378 - A Funny Stone Game sg博弈

    题意:David 玩一个石子游戏. 游戏中,有n堆石子,被编号为0..n-1.两名玩家轮流取石子. 每一轮游戏.每名玩家选取3堆石子i,j,k(i<j,j<=k,且至少有一枚石子在第i堆石 ...

  5. Light OJ 1296 - Again Stone Game (博弈sg函数递推)

    F - Again Stone Game Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu ...

  6. UVA 11534 - Say Goodbye to Tic-Tac-Toe(博弈sg函数)

    UVA 11534 - Say Goodbye to Tic-Tac-Toe 题目链接 题意:给定一个序列,轮流放XO,要求不能有连续的XX或OO.最后一个放的人赢.问谁赢 思路:sg函数.每一段.. ...

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

    option=com_onlinejudge&Itemid=8&page=show_problem&problem=4342">题目链接:uva 1567 - ...

  8. S-Nim HDU 1536 博弈 sg函数

    S-Nim HDU 1536 博弈 sg函数 题意 首先输入K,表示一个集合的大小,之后输入集合,表示对于这对石子只能去这个集合中的元素的个数,之后输入 一个m表示接下来对于这个集合要进行m次询问,之 ...

  9. UVA 10561 - Treblecross(博弈SG函数)

    UVA 10561 - Treblecross 题目链接 题意:给定一个串,上面有'X'和'.',能够在'.'的位置放X.谁先放出3个'X'就赢了,求先手必胜的策略 思路:SG函数,每一个串要是上面有 ...

随机推荐

  1. CH Round #51 - Shinrein祭 #1

    A.Phorni 题目:http://www.contesthunter.org/contest/CH%20Round%20%2351%20-%20Shinrein祭%20%231/Phorni 没做 ...

  2. 数据结构(树链剖分,线段树):SDOI 2016 游戏

    4515: [Sdoi2016]游戏 Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 351  Solved: 157[Submit][Status][ ...

  3. 【模拟】Vijos P1005 超长数字串

    题目链接: https://vijos.org/p/1005 题目大意: 无限的正整数按顺序拼接成字符串S(S=12345678910111213...),给你一个字符串A(len<=200)求 ...

  4. UNIX环境下的消息队列

    消息队列和共享内存一样,也是一种IPC对象.消息队列其实就是消息的链表,每一则消息都是用户自己的结构体.服务端这边创建消息队列,客户端这边打开消息队列,两个进程就可以进行通信.创建和打开消息队列使用函 ...

  5. Apache multiple domains setup

    Running several name-based web sites on a single IP address. Your server has a single IP address, an ...

  6. poj 2187 凸包加旋转卡壳算法

    题目链接:http://poj.org/problem?id=2187 旋转卡壳算法:http://www.cppblog.com/staryjy/archive/2009/11/19/101412. ...

  7. awr报告

    BEGIN DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();END;/ exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ...

  8. ConcurrentHashMap 原理分析

    1 为什么有ConcurrentHashMap hashmap是非线程安全的,hashtable是线程安全的,但是所有的写和读方法都有synchronized,所以同一时间只有一个线程可以持有对象,多 ...

  9. Git push本地代码到新建远程仓库

    快速搞定  1.git init #初始化本地仓库 2.git remote add origin https://git.oschina.net/redArmy/springboot-swagger ...

  10. 简单md5加密

    using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptograph ...