设为首页 加入收藏

TOP

hdu 2177 取(2堆)石子游戏
2015-07-20 17:56:27 来源: 作者: 【 】 浏览:4
Tags:hdu 2177 石子 游戏

天资愚笨啊,网上的一大堆没看懂。。。。。。

总结百科的方法为:

1.a==b

同时减去a 得到0,0

2.a==a_k b>b_k

b -(b-b_k)

3.a==a_k b

同时拿走a_k-a_(b-a_k)

得到 a_(b-a_k) a_(b-a_k) + b-a_k

4.a>a_k b==b_k

从a中拿走 a-a_k

5.a

5.1 a==a_ j (j

b-(b-b_ j)

得到 a_ j b_ j

5.2 a==b_ j (j

b-(b-a_ j)

得到 b_ j a_ j

反正我是没搞懂!!o(?□?)o。。。。

我的方法就是 穷举了:

第一个分支,从两堆物品中同时取出相同数量的物品

第二个分支,只从一堆物品中取物品

代码如下:

#include
    
     
#include
     
       int main() { int a,b,k,temp,n,i,aa,bb,x,y; double m; while(~scanf("%d%d",&a,&b)&&a+b) { if(a>b) { temp=a; a=b; b=temp; } k=b-a; m=(1+sqrt(5.0))/2.0; n=(int)k*m; if(a==n) printf("0\n"); else { printf("1\n"); for(i=1;i<=a;i++) { aa=a-i; bb=b-i; if(n==aa) { printf("%d %d\n",aa,bb); break; } } for(i=b;i>=0;i--) { x=a;y=i; if(x>y) { temp=y; y=x; x=temp; } k=y-x; n=(int)k*m; if(x==n) { printf("%d %d\n",x,y); break; } } } } return 0; } 
     
    



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ训练计划3277_City Horizon(扫.. 下一篇华为面试题――单向链表倒转(一..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: