首页 > 代码库 > 【Bzoj3609】[Heoi2014]人人尽说江南好(博弈)

【Bzoj3609】[Heoi2014]人人尽说江南好(博弈)

技术分享

先pia代码

技术分享
 1 #include<iostream>
 2 using namespace std;
 3 int main(){
 4     int n,a,b;
 5     cin>>n;
 6     for(int i=0;i<n;i++){
 7         cin>>a>>b;
 8         int c=a/b;int d=a%b;//c代表最多分成c份b堆。d代表剩下的那一堆最多为多少 
 9         if(d==0) d++;//如果根本没有剩下的,那就把d+1,使ans的值不会错~ 
10          int ans=c*(b-1)+d-1;
11          if(ans%2==0) cout<<1<<endl;
12          else cout<<0<<endl;
13     }
14 }
又臭又短(?)的代码

 

 首先,这是第一道通过自身的努力,不问大佬后写出来的

其次,这道题我本来在30min内快A掉了,发现W一脸懵逼,找了很久不造为什么,突然发现自己代码没换行(技术分享

后来本着试一试的心情把printf和scanf改成cin>>……和cout<<……<<endl;结果就过了==于是乎。。。

没有A的原因是没换行TAT


 

好了回归正题~:

先说思路:求出合并总次数,然后判断奇偶便可

证一波:

因为每堆石子合并到对后肯定不能超过m,于是乎,最优方案是先把n分解成c对大小为m的石子堆~(这样后面的肯定就不能与前面的合并了吧),然后剩下的在一一处理。判断最后一步合并是谁走的,如果是偶数那就是对手走的,反之便是小Z走的辣

a个一合并成a的次数就是a-1了嘛。。。


 

附张图片:

技术分享这是数字7的分解图


 

【Bzoj3609】[Heoi2014]人人尽说江南好(博弈)