标签:整数 最好 content 因此 nbsp tle 不同的 组成 出现
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1527
两个人如果都采用正确操作(最优策略),那么面对非奇异局势,先手必胜;反之,则后手必胜。
那么任给一个局势(a,b),怎样判断它是不是奇异局势呢?我们有如下公式:
ak =[k*(1+√5)/2],bk= ak + k (k=0,1,2,...n 方括号表示取整函数)
奇妙的是其中出现了黄金分割数(1+√5)/2 = 1.618...因此,由ak,bk组成的矩形近似为黄金矩形,由于2/(1+√5)=(√5-1)/2,可以先求出j=[a(√5-1)/2],若a=[j(1+√5)/2],那么a = aj,bj = aj + j,若不等于,那么a = aj+1,b = aj + j + 1,若都不是,那么就不是奇异局势。然后再按照上述法则进行,一定会遇到奇异局势。
结论:若两堆物品的初始值为(x,y),且x<y,则令z=y-x;
记w=(int)[((sqrt(5)+1)/2)*z ];若w=x,则(面对奇异局势)先手必败,否则先手必胜。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int a,b; 6 while(cin>>a>>b){ 7 if(a>b)swap(a,b);//以便做差值,取正值 8 int tmp=floor((b-a)*(1+sqrt(5.0))/2.0); 9 if(a==tmp)cout<<‘0‘<<endl;//如果面对奇异局势,则后手必赢,先手必输 10 else cout<<‘1‘<<endl;//否则先手必赢 11 } 12 return 0; 13 }
标签:整数 最好 content 因此 nbsp tle 不同的 组成 出现
原文地址:https://www.cnblogs.com/acgoto/p/9095185.html