/************************************** *************************************** * Author:Tree * *From :http://blog.csdn.net/lttree * * Title : 取(两堆)石子游戏 * *Source: hdu 2177 * * Hint : 威佐夫博弈 * *************************************** **************************************/ #include <stdio.h> #include <math.h> int main() { int a,b,i,k,m,n; double eqa = (1+sqrt(5.0))/2.0; while( scanf("%d%d",&a,&b)!=EOF && (a||b) ) { // 当a>b时,交换a,b的值,当然你也可以用一个中间变量来交换a,b值 if( a > b ) { a^=b; b^=a; a^=b; } k=b-a; if( int(k*eqa)==a ) printf("0 "); else { printf("1 "); for(i=1; i<=a; ++i) { n=a-i,m=b-i; if( int(k*eqa) == n ) printf("%d %d ",n,m); } for(i=b; i>=0; --i) { n=a,m=i; if( n > m ) { n^=m; m^=n; n^=m; } k=m-n; if( int(k*eqa) == n ) printf("%d %d ",n,m); } } } return 0; }