邂逅明下 HDU - 2897
阿新 • • 發佈:2018-11-19
Problem description:
有三個數字n,p,q,表示一堆硬幣一共有n枚,從這個硬幣堆裡取硬幣,一次最少取p枚,最多q枚,如果剩下少於p枚就要一次取完。兩人輪流取,直到堆裡的硬幣取完,最後一次取硬幣的算輸。對於每一行的三個數字,給出先取的人是否有必勝策略,如果有回答WIN,否則回答LOST。
Input 不超過100000行,每行三個正整數n,p,q。Output對應每行輸入,按前面介紹的遊戲規則,判斷先取者是否有必勝策略。輸出WIN或者LOST。 Sample Input7 2 4 6 2 4Sample Output
LOST WIN
思路:總是讀題不準,原來是最後一個取的人會輸,而且這個不能用動態規劃做,會超時。
這個其實是巴什博奕。
#include<iostream> using namespace std; int main(){ int n,p,q; while(cin>>n>>p>>q){ int s=n%(p+q); if(s==0) cout<<"WIN"<<endl; else if(s<=p) cout<<"LOST"<<endl; else cout<<"WIN"<<endl; } }