码迷,mamicode.com
首页 > 其他好文 > 详细

[HEOI2014] 人人尽说江南好

时间:2018-09-02 11:09:26      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:cpp   put   scanf   return   游戏   -o   lin   mod   def   

[HEOI2014] 人人尽说江南好

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

Solution

可以知道,最终的石子堆是\(m,m,m,\cdots,m, n\bmod m\)这样的,共有\(\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;
} 

[HEOI2014] 人人尽说江南好

标签:cpp   put   scanf   return   游戏   -o   lin   mod   def   

原文地址:https://www.cnblogs.com/LMSH7/p/9572880.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!