NC201621. 取石子游戏
描述
小灰灰和小乔在玩取石子游戏,一堆石子有个石子,小灰灰和小乔轮流操作,小灰灰先手,每次操作的人可以进行以下操作:
小灰灰和小乔都非常聪明,所以都会采用最优的策略,你知道最后小灰灰和小乔谁能赢得游戏吗?
输入描述
输入共包含组数据
第一行一个整数,表示测试用例的组数
接下来行每行一个整数。
输出描述
对于每组案例,如果小灰灰赢,输出,否则输出,不带双引号。
示例1
输入:
10 1 2 3 4 5 6 7 8 9 10
输出:
XiaoQiao XiaoHuiHui XiaoHuiHui XiaoQiao XiaoQiao XiaoQiao XiaoHuiHui XiaoHuiHui XiaoHuiHui XiaoHuiHui
C++14(g++5.4) 解法, 执行用时: 29ms, 内存消耗: 1496K, 提交时间: 2020-03-13 20:32:26
#include<iostream> using namespace std; int main() { int x; scanf("%d",&x); for(long long a;x--;) { scanf("%lld",&a); long long sum=1; int i=0; for(;sum<a;i++) { sum*=2; if(i%2==0)sum++; } printf(i%2?"XiaoHuiHui\n":"XiaoQiao\n"); } return 0; }
C(clang11) 解法, 执行用时: 26ms, 内存消耗: 1272K, 提交时间: 2021-04-27 13:34:03
#include<stdio.h> int main() { long long i,j,k,l,n,t; scanf("%lld",&t); while(t--){ scanf("%lld",&n); for(k=1,l=2;k<n;){ if(l==2){ l=1;k=k*2+1; } else{ l=2;k*=2; } } if(l==1) printf("XiaoHuiHui\n"); else printf("XiaoQiao\n"); } }
C++11(clang++ 3.9) 解法, 执行用时: 198ms, 内存消耗: 1272K, 提交时间: 2020-03-13 19:19:32
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e5+5; int T,f[N]; ll n; int main(){ cin>>T; while(T--){ cin>>n; ll x=3; while(n>x)x=x*4+1; if(n>x/2)puts("XiaoHuiHui"); else puts("XiaoQiao"); } }
pypy3(pypy3.6.1) 解法, 执行用时: 521ms, 内存消耗: 25824K, 提交时间: 2020-03-13 22:49:52
ans = ['XiaoQiao', 'XiaoHuiHui'] for _ in range(int(input())): n = int(input()) b = 1 f = 0 while n > b: f ^= 1 b = (b << 1) + f print(ans[f])