暑假集训(4)第六弹——— 组合(poj1067)

题意概括:上一次,你成功甩掉了fff机械兵。不过,你们也浪费了相当多的时间。fff团已经将你们团团包围,并且逐步

逼近你们的所在地。面对如此危机,你不由得悲观地想:难道这acm之路就要从此中断?虽然走上这条路不过数日,好

歹你也帮助过许多生物脱离困境啊。怎么就好人......等等,你翻了翻包裹,拿出了一个颇为古旧的黄铜瓶,瓶口用锡

纸封着,这瓶子是上次那只青蛙送的,它说危难之际,打开瓶口便可解围。“娑殚之瓶!“,谁知刚拿出瓶子,就听到小A

惊讶的呼声,“它也许能帮我们脱离困境,不过恐怕会有些危险。”

”别管那么多,该怎么做?”你急忙问道,“打开瓶口就行了。”虽然说这个方法听起来有点耳熟,但依现在的处境,死马当

作活马医吧。你揭开瓶口的锡纸。一阵青烟从中冒出,化作一只可怖的恶鬼盯着你.

你:”......"

魔鬼:“只要你与我博弈三局,你全胜,那么我就满足你的一个愿望,否则,你只要输上一句。哼。”

你来不及吐槽这个恶俗的桥段,便答应了魔鬼的要求。第一局,魔鬼变出了两堆石头,他给出石头数目,你选择先后手,看

谁是最后一个无法再拿走石头的人。

问题分析:威佐夫博弈问题,只要判断当前处于p局势,还是N局势即可,当前为p则当前者失败,反之下位失败。

 1 #include "stdio.h"
 2 #include "cmath"
 3 #define  GOLD  ((sqrt(5.0) + 1)/2)
 4 int main()
 5 {
 6     int n,m,s;
 7     while (scanf ("%d%d",&n,&m) != EOF)
 8     {
 9        s = std::abs(m-n);
10        if (n == int (s*GOLD) || m == int (s*GOLD))
11             printf ("0
");
12        else
13             printf ("1
");
14     }
15     return 0;
16 }
View Code