标签:other alt 顺序 tle limit mon desc 通过 center
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 int n, m, c; 8 cin >> c; 9 while(c--){ 10 cin >> n >> m; 11 if(n%(m+1)){ 12 cout << "Grass" << endl; 13 } 14 else cout << "Rabbit" << endl; 15 } 16 return 0; 17 }
1、问题模型:只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个,最后取光者得胜。
2、解决思路:当n=m+1时,由于一次最多只能取m个,所以无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜,所以当一方面对的局势是n%(m+1)=0时,其面临的是必败的局势。所以当n=(m+1)*r+s,(r为任意自然数,s≤m)时,如果先取者要拿走s个物品,如果后取者拿走x(≤m)个,那么先取者再拿走m+1-k个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下(m+1)的倍数,就能最后获胜。
3、变形:条件不变,改为最后取光的人输。
结论:当(n-1)%(m+1)==0时后手胜利。
HDU_2188
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 9418 Accepted Submission(s): 5948
1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 int n, m, c; 8 cin >> c; 9 while(c--){ 10 cin >> n >> m; 11 if(n%(m+1)){ 12 cout << "Grass" << endl; 13 } 14 else cout << "Rabbit" << endl; 15 } 16 return 0; 17 }
HDU_2149
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7710 Accepted Submission(s): 4598
#include <iostream> using namespace std; int main() { int n, m; while(cin >> m >> n){ if(m%(n+1)){ if(m <= n){ for(int i = m;i <= n;i++){ if(i == m) cout << i; else cout << " " << i; } cout << endl; } else cout << m%(n+1) << endl; } else cout << "none" << endl; } return 0; }
标签:other alt 顺序 tle limit mon desc 通过 center
原文地址:http://www.cnblogs.com/jxust-jiege666/p/6655492.html