生活随笔
收集整理的這篇文章主要介紹了
Codeforces_841_B Godsend(思路|简单博弈)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Codeforces_841_B Godsend
題意
A和B兩個人玩游戲
1. 在一個數組num[]中
2. A先從num[]數組中選擇”任意的”“區間和是奇數”“連續的”一個區間,然后把這個區間的數字去掉.
3. 接下來是B從剩下的選擇”任意的”“區間和是偶數”“連續的”一個區間,然后把這個區間的數字去掉
4. 直到誰沒有數字可以去掉了,就輸了
解決
第一次做cf有點小緊張,然后想了想就去判斷奇數的個數和偶數的個數誰打誰小.結果被Hack掉了/(ㄒoㄒ)/~~我們再想一想,其實,只要這個數組里出現了奇數,那就是A贏(輸出first)
如果只有一個奇數, 2 2 1 2 2,第一個人會把所有的數字都拿掉,因為偶數不影響奇偶性如果奇數是分散開的, 先看是奇數個數為奇數的情況: 2 1 2 1 2 1 4,第一個人還是會拿掉所有的…如果是偶數個奇數,比如: 2 1 4 4 1 2 ,第一個人只要先拿掉2 1 4 4 給第二個人剩下一個奇數(第二個人不可能能拿奇數啊),這個奇數只能由第一個人來拿…所以還是第一個人贏… 所以這個題就變成了,判斷有沒有出現奇數就好了…
補充兩個常見單詞?^_^ odd num(偶數),even num(奇數)
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>
#include <string>
#include <cmath>
#include <queue>
#include <set>
#include <map>
#include <complex>
using namespace std;
typedef long long ll;
typedef long double db;
typedef pair<
int,
int> pii;
typedef vector<int> vi;
#define de(x) cout << #x << "=" << x << endl
#define rep(i,a,b) for(int i=a;i<(b);++i)
#define all(x) (x).begin(),(x).end()
#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define E 1e-6
#define INF 0x3f3f3f3f
void open(){freopen(
"data.txt",
"r",stdin);}
void out(){freopen(
"out.txt",
"w",stdout);}
const int maxn =
101010;
const int MOD =
1e9 +
7;
int main()
{
int x,n;
scanf(
"%d",&n);rep(i,
0,n){
scanf(
"%d",&x);
if(x&
1){
puts(
"First");
return 0;}}
puts(
"Second");
return 0;
}
總結
以上是生活随笔為你收集整理的Codeforces_841_B Godsend(思路|简单博弈)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。