HDU - 2897 邂逅明下 经典博弈
巴士博弈变形。
给定n个石头,每次最少选择p个石头,最多选择q个石头。当石头数少于p时必须全选。
最终选择的人输。
考虑一个很好的性质:每一轮两人之和可以达到 p + q。
取s = n % (p + q)
若s == 0 先手只需先拿q个。随后使得和为p + q .总可以使得最后剩下p个让后手拿。
s <= p 先手无论怎么拿,后手可以时每轮 和为p + q。这样总剩下 s个让先手拿。
s > p 先手只需使k个转换到第二种情况即可。
int main() { int n, p, q; while (~scanf("%d", &n)) { p = readint(); q = readint(); int s = n % (p + q); if (s <= p && s) puts("LOST"); else puts("WIN"); } }