列表

详情


NC214136. TakeApples

描述

小A和小B共有个苹果,他们准备玩一个游戏,获胜的人将赢得所有苹果。
游戏规则如下:两人轮流取苹果,每一轮两人各取一次苹果(至少取一个),第一轮每人最多取1个苹果、第二轮每人最多取2个苹果、······、第轮每人最多取个苹果。
游戏会一直进行下去,直到所有苹果被取完,取完最后一个苹果的人获胜。
小A比较谦让,所以让小B先手取苹果。现在小A想问你:在最优策略下,他能否获胜呢?如果能请回答"YES",否则回答"NO"(不包含引号)

输入描述

第一行输入一个正整数,代表测试用例的组数
接下来行,每行输入一个正整数

输出描述

对于每组输入,输出一行字符串"YES"或"NO"(不包含引号)

示例1

输入:

3
1
2
7

输出:

NO
YES
NO

说明:

时,小B取1个苹果,小B胜
时,小B取1个苹果,小A取1个苹果,小A胜
时,小B取1个苹果,小A取1个苹果,小B选择再取1个苹果,还剩下4个苹果,此时小A只能取1或2个苹果,但下一轮小B取苹果个数的范围是,总能取完苹果

原站题解

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

C(clang11) 解法, 执行用时: 17ms, 内存消耗: 372K, 提交时间: 2020-12-07 19:31:32

#include<stdio.h>
main() 
{
	long long int k,n,i;
	int y;
	scanf("%d",&y);
	while(y--) 
	{
		k=0;
		scanf("%lld",&n);
		for(i=2;k+i<=n;i++)
		{
		k+=i;
		}
		if(k!=n)
		printf("NO\n");
		else
		printf("YES\n");
	
	}
}

C++(clang++11) 解法, 执行用时: 34ms, 内存消耗: 504K, 提交时间: 2020-11-27 20:02:16

#include<bits/stdc++.h>
using namespace std;
int t,n,now,ans;
int main(){
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		for(ans=now=2;ans<n;now++,ans+=now);
		puts(ans==n?"YES":"NO");
	}
	return 0;
}

上一题