NC236919. Stone Game
描述
输入描述
第一行一个整数 (),表示箱子个数。
接下来 行,每行两个整数 , (),表示第 个箱子最多放 个石子,以及当前箱子中已经有 个石子。
输出描述
如果先手获胜输出"Yes",否则输出"No"。
示例1
输入:
3 2 0 3 3 6 2
输出:
Yes
示例2
输入:
2 6 3 6 3
输出:
No
pypy3 解法, 执行用时: 72ms, 内存消耗: 21212K, 提交时间: 2023-07-19 14:33:27
import sys;input=sys.stdin.readline;R=lambda:list(map(int,input().split()));P=lambda x:print(x);I=lambda:int(input());YES='Yes';NO='No' a=[] for _ in range(I()): x,y=R() if not y: a.append(0) continue s=x c=y while 1: q=int(s**0.5) while q*q+q>=s: q-=1 if q<c: a.append(s-c) break if q==c: a.append(0) s=q r=0 for i in a: r^=i if r: P(YES) else: P(NO)
C++(g++ 7.5.0) 解法, 执行用时: 5ms, 内存消耗: 476K, 提交时间: 2022-11-04 15:04:34
#include <bits/stdc++.h> using namespace std; int n; int get_sg(int x,int y) { int q=sqrt(x); while(q+q*q>=x) q--; if(q>=y) return get_sg(q,y); else return x-y; } int main() { scanf("%d",&n); long long ans=0; for(int i=1;i<=n;i++) { int x,y; scanf("%d%d",&x,&y); ans^=get_sg(x,y); } if(ans) printf("Yes\n"); else printf("No\n"); }
C++(clang++ 11.0.1) 解法, 执行用时: 4ms, 内存消耗: 428K, 提交时间: 2023-07-22 11:17:08
#include<bits/stdc++.h> using namespace std; int sg(int x,int y){ int q=sqrt(x); while(q*(q+1)>=x)q--; if(q>=y)return sg(q,y); else return x-y; } signed main(){ int n,m,k,ans=0; scanf("%d",&n); while(n--){ scanf("%d%d",&m,&k); ans^=sg(m,k); }if(ans)cout<<"Yes\n"; else cout<<"No\n"; }