列表

详情


NC237119. Be the Winner

描述

n 堆苹果。 您可以一次取任意数量的连续苹果。
例如“@@@”可以变成“@@”或“@”或“@ @”(两堆)。 两个人一个接一个拿到苹果,最后一个拿的是失败者。 Fra 想知道在哪些情况下他可以通过策略获胜(即无论对手采取什么行动,fra 都会获胜)。

输入描述

第一行一个整数 n (),表示 n 堆苹果。
第二行 n 个整数 a (),表示第 i 堆苹果有 a_i 个。

输出描述

如果有必胜策略,输出"Yes",否则输出"No"。

示例1

输入:

2
2 2

输出:

No

示例2

输入:

1
3

输出:

Yes

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(g++ 7.5.0) 解法, 执行用时: 3ms, 内存消耗: 500K, 提交时间: 2022-08-24 16:37:24

#include <bits/stdc++.h>
#define rep(i, a, b) for(int i = (a); i < (b); i++)
#define _for(i, a, b) for(int i = (a); i <= (b); i++)
using namespace std;

int main()
{
    int n, cur = 0, flag = 1; 
    scanf("%d", &n);
    _for(i, 1, n)
    {
        int x; scanf("%d", &x);
        if(x > 1) flag = 0;
        cur ^= x;
    }

    if(flag) puts((n % 2 == 0) ? "Yes" : "No");
    else puts(cur ? "Yes" : "No");
    
    return 0;
}

C++(clang++ 11.0.1) 解法, 执行用时: 2ms, 内存消耗: 480K, 提交时间: 2022-07-28 23:28:16

#include <bits/stdc++.h>
using namespace std;
int n;
int a[105];
int main(){
    cin>>n;
    int flag=0,ans=0;
    for(int i=0;i<n;i++){
        cin>>a[i];
        ans^=a[i];
        if(a[i]>1)flag=1;
    }
    if((flag==0&&ans==0)||(flag==1&&ans>0))cout<<"Yes\n";
    else cout<<"No\n";
    return 0;
}

上一题