题意:两个人博弈,地上有n个标号从1~n的石子,然后每人依次拿走一个石头,在拿走一个石头的同时,它的因数石子也会被同时去掉,0<=n<=60。最后石子都被拿光后,没的石子拿的那个人输掉。给你不同的n,让你求先手胜还是负。
解题思路:想明白了很简单,想不通就做不出来。
假设存在一种n并且先手选2~n,是先手必败,那么后手就是必胜了,此时1已经被取走了,因为1是所有数的因数。那么如此来看,先手如果不选2~n,而选1,那么必败态就留给后手了,所以无论如何主动权都是在先手的人,先手可以选择是否先拿走1,所以先手必胜。当然,n=0除外。.
There is a game very popular in ZJU at present, Bob didn't meant to participate in it. But he decided to join it after discovering a lot of pretty girls playing it.
There are n stones on the ground and they are marked as 1 to n respectively. There will be 2 players in each competition. And the game rules are simple, A and B take turns to move. Each round, one of them can only take 1 number away, and then pick out all the divisors of the choosed number. When anyone who can not take away 1 number any longer, he will fail the whole game.
Input
There are multiple cases. Each case include an integer number n (0 ≤ n ≤ 100).
Output
For each case, A win, output "win". If not, output"fail".
Sample Input1
3 4
Sample Output1
win win
Author: ZHANG, Yunxiao
Source: ZOJ Monthly, July 2014
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string>
#include <string.h>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <stack>
using namespace std;
typedef long long LL;
const int INF=0x7fffffff;
const int MAX_N=10000;
int a;
int main(){
while(cin>>a){
if(a==0)printf("fail\n");
else printf("win\n");
}
return 0;
}