其他分享
首页 > 其他分享> > 博弈论:Play a game - hdu1564

博弈论:Play a game - hdu1564

作者:互联网

 

 

【题目大意】:

  ailyanlu 和 8600 在一块大小为 n*n的棋盘上下棋 , 8600 先手。

  棋盘上只有一颗旗子(初始的位置在角落。),每次操作都只能操作它。  

  每个选手每次都可以将棋子移动到 相邻的点上 ( 只要这个点之前没有到过 )。

  当一个人没法操作时,游戏结束,胜者是另一个人。求出赢的那个人是谁。

【思路】:

  除去棋子一开始占得点,只剩下n*n-1 个位置 。 当剩余位置为0 的时候,就是必败点。

  所以只要 n*n-1为奇数 ,这样就能把偶数情况留给对手,对手就只能必败。自己就必胜。

【代码】:

  

#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <vector>
#include <stack>
#include <bitset>
#include <cstdlib>
#include <cmath>
#include <set>

#define ms(a, b) memset(a,b,sizeof(a))
#define fast ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
#define ll long long
#define ull unsigned long long
#define rep(i, a, b)  for(ll i=a;i<=b;i++)
#define lep(i, a, b)  for(ll i=a;i>=b;i--)
#define endl '\n'
#define pii pair<int, int>
#define pll pair<ll, ll>
#define vi  vector<ll>
#define vpi vector<pii>
#define vpl vector<pll>
#define mi  map<ll,ll>
#define all(a)  (a).begin(),(a).end()
#define gcd __gcd
#define pb push_back
#define mp make_pair
#define lb lower_bound
#define ub upper_bound

#define ff first
#define ss second
#define test4(x, y, z, a) cout<<"x is "<<x<<"        y is "<<y<<"        z is "<<z<<"        a is "<<a<<endl;
#define test3(x, y, z) cout<<"x is "<<x<<"        y is "<<y<<"        z is "<<z<<endl;
#define test2(x, y) cout<<"x is "<<x<<"        y is "<<y<<endl;
#define test1(x) cout<<"x is "<<x<<endl;
using namespace std;
const int N = 1e5 + 10;
const int maxx = 0x3f3f3f;
const int mod = 1e9 + 7;
const int minn = -0x3f3f3f;
const int M = 2 * N;
ll T, n, m;

void solve() {
    if ( (n*n-1) % 2 == 1 ) cout<<"8600"<<endl;
    else cout<<"ailyanlu"<<endl;

}

int main() {
    fast;
    while ( 1 ){
        cin>>n;
        if ( n==0 ) break;
        solve();
    }
    return 0;
}
View Code

 

标签:Play,cout,long,game,vector,hdu1564,pair,include,define
来源: https://www.cnblogs.com/opanc/p/16123835.html