NC19787. Stones
描述
输入描述
第一行一个整数t表示数据组数 (1 ≤ t ≤ 1000)。
每组数据第一行三个整数n,a,b (1 ≤ n ≤ 1000,1≤ a ≤ b ≤ 109),第二行n个整数 (1 ≤ xi ≤ 109)。
输出描述
每组数据输出一行一个字符串:如果修修可以获胜输出Yes,否则输出No。
示例1
输入:
2 1 1 3 4 1 1 3 6
输出:
No Yes
C++14(g++5.4) 解法, 执行用时: 151ms, 内存消耗: 352K, 提交时间: 2018-10-10 19:21:23
#include <bits/stdc++.h> using namespace std; int a, b; int SG(int s) { if (s <= b) return 0; if (a == 1) return s % (a+b); s -= b; s %= (a+b); s /= a; if (s <= 1) s ^= 1; return s; } int main() { int T, n; cin >> T; while (T--) { int s; int ans = 0; int tmp = 0; scanf("%d %d %d", &n, &a, &b); for (int i = 1; i <= n; ++i) { scanf("%d", &s); if (s >= a && s <= b) tmp = 1; ans ^= SG(s); } if (tmp == 1 || ans) cout << "Yes" << '\n'; else cout << "No" << '\n'; } return 0; }
C++(clang++11) 解法, 执行用时: 380ms, 内存消耗: 360K, 提交时间: 2020-12-16 19:50:43
#pragma GCC optimize(3) #pragma GCC optimize("Ofast") #include<bits/stdc++.h> using namespace std; #define ll long long ll n,a,b,s,x; bool f; ll sg(ll x){ x%=b+a; if(a==1)return x; if(x<a)return 0; if(x>=b)return 1; return x/a+1; } int main(){ int t; cin>>t; while(t--){ f=false;s=0; cin>>n>>a>>b; for(int i=0;i<n;i++){ cin>>x; if(a<=x&&x<=b)f=true; s^=sg(x); } puts(f||s?"Yes":"No"); } return 0; }