首页 > 代码库 > 【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]人人尽说江南好(博弈)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。