那些年

题目描述 Description
  黑板上有n个数字X1,X2,X3,……Xn,男主和女主玩起了数字游戏。
  女主和男主轮流对其中一个数进行游戏操作:
  将Xi改为区间[(Xi+1)/2,Xi )中的一个数。(除法向下取整,区间左闭右开)
  如果这个数变成了1,便将其擦去(优先于人物操作),无法修改数字的人失败。

  男主希望女主在双方均采取最优策略的情况下永远取得胜利。
输入描述 Input Description
  第一行为一个正整数n,代表数字个数。
  第二行为n个正整数,代表X1,X2,X3,……Xn这n个数字。
输出描述 Output Description
  如果从女主开始游戏,女主可以获胜,输出"Lady First" (不含引号),表示男主将主动权让给了女主。
  否则必须是从男主开始,女主才能获胜,输出"You Are An Apple of My Eyes" (不含引号),表示男主赞美了女主之后才能获得主动权。
样例输入 Sample Input
【样例输入1】
1
5201314

【样例输入2】
6
20 13 3 22 17 25
样例输出 Sample Output
【样例输出1】
Lady First
【样例输出2】
You Are An Apple of My Eyes
数据范围及提示 Data Size & Hint
【数据范围与约定】
  对于100%的数据,1 ≤ n ≤ 520,1 ≤ ai ≤ 1018。

【来源】
  2013年3月24日白色情人节欢乐赛Day2T1。


先达标打印出sg值,发现如果n为奇数sg(n)=sg(n/2)

如果n为偶数sg(n)=n/2


#include <cstdio>
typedef long long lli;
lli get_sg(lli n){
     if(n & 1)
     {
          return get_sg(n>>1);
     }
     else
          return n<<1;
}
int main(void){
     int n;
     scanf("%d", &n);
     lli ans = 0, t;
     for(int i =0; i < n; ++i)
     {
          scanf("%lld", &t);
          ans ^= get_sg(t);
     }
     if(ans == 0)
     {
          printf("You Are An Apple of My Eyes\n");
     }
     else
     {
          printf("Lady First\n");
     }
     return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值