题目
题意:给定一个序列
a
i
a_i
ai,每个
a
i
a_i
ai代表石头数量,两个玩家轮流移动石头,每次要求从第一堆不为0的石头堆中,移动至少一个石头。没有石头可以移动的玩家,就输了。问两者都明智的玩,谁胜。
1
<
=
n
<
=
1
e
5
,
1
<
=
a
i
<
=
1
e
9
1<=n<=1e5,1<=a_i<=1e9
1<=n<=1e5,1<=ai<=1e9。
思路:当石头堆大于1时,那么当前玩家可以选择拿
a
i
a_i
ai,也可以选择拿
a
i
−
1
a_i-1
ai−1,通过这种方式,可以决定后边的胜态和败态。因此,首个大于1的位置,可以决定胜败。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 100010;
int a[maxn];
int n;
int main() {
int t;
scanf("%d",&t);
while(t--) {
scanf("%d",&n);
for(int i = 1;i <= n; ++i) {
scanf("%d", &a[i]);
}
bool first = 0;
for(int i = 1;i <= n; ++i) {
first = !first;
if(a[i] > 1) break;
}
if(first) {
printf("First\n");
} else {
printf("Second\n");
}
}
return 0;
}