NC221662. 博弈
描述
输入描述
第一行输入T。
对于每一组数据,一共两行。
第一行两个数n、k分别表示有n组石头,k个数。
第二行n个数表示第i堆石子有个石子。
输出描述
对于每一组数据,如果牛妹有必胜方案,输出"yes"否则输出"no",均不含引号,用空格隔开。
示例1
输入:
2 5 2 1 2 3 4 5 4 3 1 2 4 8
输出:
yes no
C++ 解法, 执行用时: 417ms, 内存消耗: 472K, 提交时间: 2021-05-25 17:37:38
#include <stdio.h> void solve(){ int n,k,ans=0; scanf("%d%d",&n,&k); int mask = (1<<k)-1; for(int i=0;i<n;i++){ int a; scanf("%d",&a); if((a&mask)==mask) ans ^= (a+1); else if((a&mask)==0) ans ^= (a-1); else ans ^= a; } puts(ans?"yes":"no"); } int main(){ int T; scanf("%d",&T); while(T--) solve(); }