题意:给一串序列,第一个人可以从中随意取出和为奇数的子串,第二个人可以从中取出和为偶数的子串,第一个人先走,若到某个人时其无法进行操作,则其输。求出赢的那个人是谁
思路:如果在某步中某个人可以取完所有数,则其必胜,否则既然任意取,那就只取一个符合条件的就好了。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 1e6+5;
int n, a[maxn];
long long sum[maxn];
int main()
{
while (cin >> n) {
memset(sum, 0, sizeof(sum));
sum[0] = 0;
for (int i = 1; i <= n; i++) {
cin >> a[i];
sum[i] = sum[i-1] + a[i];
}
int turn = 1;
while (true) {
if ((sum[n] & 1) && turn == 1) {
printf("First\n");
break;
}
if (!(sum[n] & 1) && turn == 2) {
printf("Second\n");
break;
}
for (int i = 1; i < n; i++) {
if (turn == 1 && (a[i] & 1) && a[i]) {
sum[n] -= a[i];
a[i] = 0;
break;
}
if (turn == 2 && !(a[i] & 1) && a[i]) {
sum[n] -= a[i];
a[i] = 0;
break;
}
}
turn = turn == 1 ? 2 : 1;
}
}
}