POJ 2975 Nim(普通nim)

题目链接

#include<iostream>
#include<cstdio>
using namespace std;

int main()
{
    int n,k[1005];
    int sum,cnt;
    while(scanf("%d",&n)&&n)
    {
        sum=0,cnt=0;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&k[i]);
            sum^=k[i];
        }
        if(sum==0)
        {
            printf("0\n");
            continue;
        }
        for(int i=1;i<=n;i++)
            if(k[i]>=(sum^k[i])) //sum^k[i]要加括号(),不然会WA
                cnt++;
        printf("%d\n",cnt);
    }
    return 0;
}
时间: 2024-10-11 11:46:09

POJ 2975 Nim(普通nim)的相关文章

POJ 2975

题面:http://poj.org/problem?id=2975 本题就是nim游戏的一个变试,因为我们知道nim游戏中每次会取ai xor x<ai(x=a1 xor a2 xor ... xor aN的那堆石子,然后就能造成必胜局,所以只要统计有多少个满足ai xor x<ai的i即可. Code: #include<iostream> #include<cstdio> #include<cmath> #include<cstdio> #i

在AIX上配置NIM以及nim的mksysb备份

本文主要讲配置NIM以及mksysb方式的nim备份 首先以个小问题的形式来明确mksysb跟spot: 描述:A机OS level是AIX7.1TL2SP2 B机OS level也是AIX7.1TL2SP2现在A机与B机都需要升级到AIX7.1TL3SP5,在nim server端给A机做了mksysb(A_mksysb),给B机也做了mksysb(B_mksysb),现在用A_mksysb做了一个 spot(A_spot),但是没有用B_mksysb做spot问题1:升级过程中,A机与B机都

[原博客] POJ 2975 Nim 统计必胜走法个数

题目链接题意介绍了一遍Nim取石子游戏,可以看上一篇文章详细介绍.问当前状态的必胜走法个数,也就是走到必败状态的方法数. 我们设sg为所有个数的Xor值.首先如果sg==0,它不可能有必胜走法,输出0. 对于任意一堆有a[i]个石子,若sg Xor a[i] <= a[i] ,那么我们就可以在a[i]里面取出sg Xor a[i]个石子,使得剩下石子Xor和为0,于是ans++.然后输出ans. 注意C/C++语言中^操作比<操作优先级低. #include<iostream> #

poj 2975 Nim(博弈)

Nim Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5232   Accepted: 2444 Description Nim is a 2-player game featuring several piles of stones. Players alternate turns, and on his/her turn, a player’s move consists of removing one or mor

poj 2975 Nim 尼姆博弈,求取胜方案数

Nim Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5002   Accepted: 2313 Description Nim is a 2-player game featuring several piles of stones. Players alternate turns, and on his/her turn, a player's move consists of removing one or mor

POJ - 2975 Nim

我们之前的\(Nim\)游戏都已经知道当\(Nim\)和为\(0\)时是必败的. 那我们就刻意制造这种情况.因为一次只能改一堆石头,不能制造几个数异或消去\(sum\)的情况,所以只用考虑将\(a[i]\)替换为\(a[i]?sum\)的情况就行了. 注意要保证\(a[i]?sum<a[i]\). #include<cstdio> #include<cstdlib> int n, a[1002], sum, ans; int read() { int x = 0, f = 1

POJ 2975 Nim 尼姆博弈

题目大意:尼姆博弈,求先手必胜的情况数 题目思路:判断 ans=(a[1]^a[2]--^a[n]),求ans^a[i] < a[i]的个数. #include<iostream> #include<algorithm> #include<cstring> #include<vector> #include<stdio.h> #include<stdlib.h> #include<queue> #include<

poj 2311 Cutting Game nim与状态的grundy值

题意: 给一个w*h的矩形,两人轮流只能沿格子的边缘横剪或竖剪,最先剪出1*1的格子的人获胜,问先手必胜还是必败. 分析: 此题要求对grundy值有理解.一个全局状态的grundy值是对游戏中某个状态的有效的描述,grundy值描述了当前状态的所有后继状态,比如n堆石子的nim游戏的grundy值是a1^a2^...an. 代码: //poj 2311 //sep9 #include <iostream> #include <set> using namespace std; c

poj 3975&amp;&amp;hdu 1850 (nim)

//先手能赢 //从n堆石头中的一堆里去掉几颗,有多少堆石头可取 # include <stdio.h> # include <string.h> # include <algorithm> using namespace std; int main() { int n,sum,i,j,a[1010],cot,vis[1010]; while(~scanf("%d",&n),n) { sum=0; for(i=0;i<n;i++) {