0
点赞
收藏
分享

微信扫一扫

Codeforces 1634 B. Fortune Telling —— 简单思维,奇偶性

Silence潇湘夜雨 2022-02-07 阅读 75

This way

题意:

第一个人有一个数x,第二个人有一个数x+3。给你长度为n的数组a,他们俩从左到右依次遍历a[i],并且每次可以选择两个操作中的一个:
1.手上的数+=a[i]
2.手上的数^=a[i]
最终要使得手上的数=y,并且有且仅有一个人能够做到,问你这个人是谁。

题解:

一开始看到完全无从下手,首先我对于博弈本来就菜的一批,换成搜索或者dp感觉有点超出这道题的难度了,而且一下子也不知道怎么办。

此时这个+3吸引了我的注意,+3意味着这俩人不同奇偶,并且1和2操作无论怎么做都会改变手上值的奇偶性,于是解题思路就出来了:
如果x^a[1]^a[2]^…^a[n]^y是偶数的话,那么就是Alice,否则是Bob。
也就是说我们根本不需要去求出具体的过程,很多题目都不需要自己自作多情将一些不需要的因素考虑进去。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+5;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--){
        ll n,x,y,a;
        int f=0;
        scanf("%lld%lld%lld",&n,&x,&y);
        for(int i=1;i<=n;i++)scanf("%lld",&a),f^=a%2;
        int odd=(x%2)^(y%2);
        if(odd==f)printf("Alice\n");
        else printf("Bob\n");
    }
    return 0;
}

举报

相关推荐

0 条评论