洛谷 P1247 取火柴游戏 题解

作者:岸芷汀兰

一、题目:

洛谷原题

二、思路:

这可能是博弈论最简单的题了。
在这里,只简单的唠叨几句。

定理:
NIM博弈先手必胜,当且仅当A1 xor A2 xor A3 xor … xor An ≠0。

证明略。

三、代码:

//写得太丑
#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;
inline int read(void){
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=x*10+ch-'0';
        ch=getchar();
    }
    return f*x;
}

const int maxn=500005;

int n,a[maxn];

int main(){
    n=read();
    for(register int i=1;i<=n;i++){
        a[i]=read();
    }
    int ans=0;
    for(register int i=1;i<=n;i++){
        ans^=a[i];
    }
    if(!ans){puts("lose");return 0;}
    int k;
    for(register int i=31;i>=0;i--){
        if((ans>>i)&1){k=i;break;}
    }
    for(register int i=1;i<=n;i++){
        if((a[i]>>k)&1){
            int temp=a[i]^ans;
            printf("%d %d\n",a[i]-temp,i);
            for(register int j=1;j<=n;j++){
                if(i==j){printf("%d ",temp);continue;}
                printf("%d ",a[j]);
            }
            puts("");
            break;
        }
    }
    return 0;
}
阅读更多
版权声明:随便转载。 https://blog.csdn.net/zhang14369/article/details/80335515
想对作者说点什么? 我来说一句

洛谷 P1123 取数游戏

搜索

Rlt1296 Rlt1296

2016-11-13 22:42:54

阅读数:486

洛谷 P1149 火柴棒等式

模拟

SenyeLicone SenyeLicone

2016-08-20 23:31:51

阅读数:569

没有更多推荐了,返回首页

不良信息举报

洛谷 P1247 取火柴游戏 题解

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭