列表

详情


NC25720. Game

描述

    As you know, Alice and Bob may be late, but they will never be absent.
    Here comes a new game. There are n piles of stones, Alice and Bob take turns to remove stones. On each turn, a player must choose one pile and remove at least one stone, at most k stones. The goal of the game is to take the last stone. In other words, the player who take the last one wins. 
    To make the game more interesting, after every move, the number of stones in each pile can't be less than the previous pile except the first. Bob always takes the first move, I will give you an Ac as gift if you can tell me who can win this game.
It is guaranteed that the initial status is always legitimate.

输入描述

    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;
  }
}

上一题