只要开始位置不是1的话就先手赢,然后从起始位置找有几个连续的1,因为出现一个1的话就会与下一个状态相反,然后判断奇偶(别忘了特判全为1的情况,否则会TLE)
#include<bits/stdc++.h>
#define ll long long
#define IOS ios_base::sync_with_stdio(false); cin.tie(NULL);
using namespace std;
const int mod = 100;
const int MAX_N = 1000005;
char st[10005];
ll a[100005];
ll b[100005];
int main(){
int flag = -1;
int n, t;
scanf("%d", &n);
for(int i = 0; i < n; ++i) {
scanf("%lld", &a[i]);
if(a[i] != 1) flag = i;
}
t = n;
int k = 0, cnt, c, ans;
if(flag == -1) {
for(int i = 0; i < n; ++i) {
if((n - 1) % 2) printf("Second\n");
else printf("First\n");
}
} else {
memset(b, -1, sizeof(b));
int cnt = 0;
for(int i = flag;; --i) {
if(b[i] != -1) break;
if(a[i] == 1)
b[i] = ++cnt;
else {
b[i] = cnt = 0;
}
if(i == 0) i = n;
}
// if(a[0] != 1) printf("First\n");
for(int i = 0; i < n; ++i) {
// printf("%d ", b[i]);
printf("%s\n", b[i] & 1 ? "Second" : "First");
}
}
return 0;
}