NC25720. Game
描述
输入描述
The first line contains an integer number T, the number of test cases.
For each test case:
The first line contains two integers n, k(), the number of piles and the maximum number of stones each turn can remove.
The second line contains n integers (), the number of stones in pile.
输出描述
For each test case print“Alice”(without quotes) if Alice wins, and“Bob”(without quotes) otherwise.
示例1
输入:
2 3 2 3 6 8 4 3 2 5 6 13
输出:
Bob Alice
C++14(g++5.4) 解法, 执行用时: 23ms, 内存消耗: 1568K, 提交时间: 2019-05-12 16:37:00
//#pragma comment(linker, "/stack:200000000") //#pragma GCC optimize("Ofast") //#pragma GCC optimize(3) //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") //#pragma GCC target("sse3","sse2","sse") //#pragma GCC target("avx","sse4","sse4.1","sse4.2","ssse3") //#pragma GCC target("f16c") //#pragma GCC optimize("inline","fast-math","unroll-loops","no-stack-protector") //#pragma GCC diagnostic error "-fwhole-program" //#pragma GCC diagnostic error "-fcse-skip-blocks" //#pragma GCC diagnostic error "-funsafe-loop-optimizations" //#pragma GCC diagnostic error "-std=c++14" #include "bits/stdc++.h" //#include "ext/pb_ds/tree_policy.hpp" //#include "ext/pb_ds/assoc_container.hpp" #define PB push_back #define PF push_front #define LB lower_bound #define UB upper_bound #define fr(x) freopen(x,"r",stdin) #define fw(x) freopen(x,"w",stdout) #define iout(x) printf("%d\n",x) #define lout(x) printf("%lld\n",x) #define REP(x,l,u) for(ll x = l;x<u;x++) #define RREP(x,l,u) for(ll x = l;x>=u;x--) #define complete_unique(a) a.erase(unique(a.begin(),a.end()),a.end()) #define mst(x,a) memset(x,a,sizeof(x)) #define all(a) a.begin(),a.end() #define PII pair<int,int> #define PLL pair<ll,ll> #define MP make_pair #define sqr(x) ((x)*(x)) #define lowbit(x) ((x)&(-(x))) #define lson (ind<<1) #define rson (ind<<1|1) #define se second #define fi first #define sz(x) ((int)x.size()) #define EX0 exit(0); typedef long long ll; typedef unsigned long long ull; typedef double db; typedef long double ld; using namespace std; typedef vector<ll> VLL; typedef vector<int> VI; const int block_size = 320; typedef complex<ll> point; const ll mod = 1e9+7; const ll inf = 1e9+7; const ld eps = 1e-9; const db PI = atan(1)*4; template<typename T> inline int sign(const T&a) { if(a<0)return -1; if(a>0)return 1; return 0; } string to_string(string s) { return '"' + s + '"'; } string to_string(const char* s) { return to_string((string) s); } string to_string(bool b) { return (b ? "true" : "false"); } template <typename A, typename B> string to_string(pair<A, B> p) { return "(" + to_string(p.first) + ", " + to_string(p.second) + ")"; } template <typename A> string to_string(A v) { bool first = true; string res = "{"; for (const auto &x : v) { if (!first) { res += ", "; } first = false; res += to_string(x); } res += "}"; return res; } void debug_out() { cerr << endl; } template <typename Head, typename... Tail> void debug_out(Head H, Tail... T) { cerr << " " << to_string(H); debug_out(T...); } #ifndef ONLINE_JUDGE #define dbg(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__) #else #define dbg(...) {} #endif template<typename T,typename S>inline bool upmin(T&a,const S&b){return a>b?a=b,1:0;} template<typename T,typename S>inline bool upmax(T&a,const S&b){return a<b?a=b,1:0;} template<typename T> inline void in(T &x) { x = 0; T f = 1; char ch = getchar(); while (!isdigit(ch)) { if (ch == '-') f = -1; ch = getchar(); } while (isdigit(ch)) { x = x * 10 + ch - '0'; ch = getchar(); } x *= f; } ll twop(int x) { return 1LL<<x; } // m must be positive template<typename T> T MOD(T a, T m){ a %= m; if (a < 0) a += m; return a; } // a must be relatively prime to m template<typename T> T inverse(T a, T m){ a = MOD(a, m); if (a <= 1) return a; return MOD((1 - inverse(m, a) * m) / a, m); } template<typename A,typename B > inline void in(A&x,B&y) { in(x); in(y); } template<typename A,typename B,typename C>inline void in(A&x,B&y,C&z) { in(x); in(y); in(z); } template<typename A,typename B,typename C,typename D> inline void in(A&x,B&y,C&z,D&d) { in(x); in(y); in(z); in(d); } ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);} namespace SOLVE { void main(){ ll n,k; in(n,k); ll sum = 0; VLL v; if(n%2 ==1 )v.PB(0); REP(i,0,n){ ll c;in(c); v.PB(c); } for(int i = 0;i<v.size();i+=2)sum ^= (v[i+1]-v[i]) % (k+1); puts(sum == 0?"Alice":"Bob"); } } signed main() { #ifndef ONLINE_JUDGE fr("/Users/zhangqingchuan/Desktop/cp/cp/input.txt"); fw("/Users/zhangqingchuan/Desktop/cp/cp/output.txt"); #endif int t = 1; in(t); while(t--){ SOLVE::main(); } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 70ms, 内存消耗: 1372K, 提交时间: 2019-05-13 09:29:17
#include <iostream> using namespace std; int a[100005]; int main() { int t, n, k; cin >> t; while (t--) { cin >> n >> k; for (int i = 0; i < n; i++) cin >> a[i]; int sum = 0; //游戏的和 for (int i = n - 1; i >= 0; i -= 2) sum ^= (a[i] - a[i - 1]) % (k + 1); cout << (sum ? "Bob" : "Alice") << endl; } }