题意:
问题描述
ZYB在远足中,和同学们玩了一个“数字炸弹”游戏:由主持人心里想一个在[1,N]中的数字X,然后玩家们轮流猜一个数字,如果一个玩家恰好猜中X则算负,否则主持人将告诉全场的人当前的数和X比是偏大还是偏小,然后猜测的范围就会相应减小,一开始的范围是[1,N].每个玩家只能在合法的范围中猜测.
现在假设只有两个人在玩这个游戏,并且两个人都已经知道了最后的X,若两个人都采取最优策略.求X∈[1,N]中是后手胜利的X数量.
输入描述
第一行一个整数T表示数据组数。
接下来T行,每行一个正整数N.
1≤T≤100000,1≤N≤10000000
输出描述
T行每行一个整数表示答案.
输入样例
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 "); } else printf("0 "); } }