hdu 5591 BestCoder Round #65(博弈)

题意:

问题描述
ZYBZYB在远足中,和同学们玩了一个“数字炸弹”游戏:由主持人心里想一个在[1,N][1,N]中的数字XX,然后玩家们轮流猜一个数字,如果一个玩家恰好猜中XX则算负,否则主持人将告诉全场的人当前的数和XX比是偏大还是偏小,然后猜测的范围就会相应减小,一开始的范围是[1,N][1,N].每个玩家只能在合法的范围中猜测.

现在假设只有两个人在玩这个游戏,并且两个人都已经知道了最后的XX,若两个人都采取最优策略.求X \in [1,N]X[1,N]中是后手胜利的XX数量.
输入描述
第一行一个整数TT表示数据组数。

接下来TT行,每行一个正整数NN.

1 \leq T \leq 1000001T100000,1 \leq N \leq 100000001N10000000
输出描述
TT行每行一个整数表示答案.
输入样例
1
3
输出样例
1

思路:

可以看成捡石头的问题:
1.假设左右的长度相同,A捡多少则B也捡多少,这最后B必赢
2.若是长度不一样,则A先捡一部分使左右一样,则A必赢

所以只有当n为奇数且x在中间时才可能赢


#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long ll;
#define N 100050

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int x;
        scanf("%d",&x);
        if(x % 2)
        {
            printf("1\n");
        }
        else
            printf("0\n");
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值