题目大意:一个博弈游戏,地上\(n\)堆石子,每堆石子有\(1\)个,每次可以合并任意两个石子堆\(a,b\),要求\(a + b \leq m\),问先手赢还是后手赢

Solution

可以知道,最终的石子堆是m,m,m,m, n mod m这样的,并不一定是这样,比如\(1,1,1,1,1\),可以是合并为\(3,2\)\(4,1\),但总数都是\(\lceil \frac{n}{m}\rceil\)堆,每次合并两个堆,所以总合并次数为\(n-\lceil \frac{n}{m}\rceil\),若合并次数为奇数,则先手赢,若合并次数为偶数,则后手赢。

Code

// luogu-judger-enable-o2
#include <iostream>
#include <cstdio>
#define sc(x) scanf("%d", &x)

using namespace std;

int main(){
    int T, n, m;
    sc(T); 
    while(T--){
        sc(n), sc(m);
        if((n - (n - 1) / m - 1) & 1)
            puts("0");
        else 
            puts("1"); 
    }
    return 0;
} 

相关文章:

  • 2021-06-03
  • 2022-12-23
  • 2021-11-03
  • 2022-03-08
  • 2022-12-23
  • 2021-10-10
  • 2021-07-30
  • 2022-12-23
猜你喜欢
  • 2022-02-14
  • 2021-07-13
  • 2021-07-04
  • 2021-10-28
  • 2021-07-24
  • 2021-11-11
  • 2021-06-14
相关资源
相似解决方案