开头很文艺的一段说明, 2333。
题解:布什博弈的变形, 谁最后一次取谁输。如果留下了[1,p]的石子个数那么接下来取的那个人就一定输了。
现在要求的是新手赢, n%(p+q) > p 的话, 先手可以将余数从>p, 取成 小于一个p的值, 然后这个人对于剩下的石子来讲就是后手了, 然后根据布什博弈的道理, 控制区间, 然后留下 小于p的那个值就好了。
如果n % (p+q) == 0 那么先手取最大的情况就好了, 就如同样例 6 2 4 先手取4, 后手必须要把2都拿走, 后手就输了。
代码:
1 #include2 using namespace std; 3 #define LL long long 4 #define ULL unsigned LL 5 #define fi first 6 #define se second 7 #define lson l,m,rt<<1 8 #define rson m+1,r,rt<<1|1 9 #define max3(a,b,c) max(a,max(b,c))10 const int INF = 0x3f3f3f3f;11 const LL mod = 1e9+7;12 typedef pair pll;13 int n, p, q;14 int main(){15 while(~scanf("%d%d%d", &n, &p, &q)){16 if(n%(p+q) == 0 || n%(p+q) > p) puts("WIN");17 else puts("LOST");18 }19 return 0;20 }