题意:给出n颗石子,分别编号为1....n,由A先选取,然后b选取,以此类推,求出最后哪个人胜了。选取条件是本次选择数大于上次选择的数或者根据特殊要求,判断是否谁能胜利
链接:http://www.bnuoj.com/v3/problem_show.php?pid=44580
思路:分两种情况讨论,当A取子正好必胜时,A胜;当A无必胜可能时,则B必胜,则A可以直接取出去B的那个点到必胜点。其实不难。博弈问题,反证一下就说明A先手必胜了。
注意点:无
以下为AC代码:
Username | RunID | ID | Result | Language | Time | Memory | Length | Submit Time |
---|---|---|---|---|---|---|---|---|
luminous11 | 436284 | C | Accepted | GNU C++ | 924 ms | 1792 KB | 990 B | 2014-12-26 20:43:07 |
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <vector>
#include <deque>
#include <list>
#include <cctype>
#include <algorithm>
#include <climits>
#include <queue>
#include <stack>
#include <cmath>
#include <map>
#include <set>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#define ll long long
#define ull unsigned long long
#define all(x) (x).begin(), (x).end()
#define clr(a, v) memset( a , v , sizeof(a) )
#define pb push_back
#define mp make_pair
#define read(f) freopen(f, "r", stdin)
#define write(f) freopen(f, "w", stdout)
using namespace std;
int main()
{
int t;
cin >> t;
int m, n;
while ( t -- )
{
cin >> m >> n;
int a, b;
for ( int i = 0; i < n; i ++ )
{
cin >> a >> b;
}
cout << "Bill will lose HAHA" << endl;
}
return 0;
}