#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <queue>
#include <map>
#define INF 0x7fffffff
using namespace std;
const int MOD = 1e9 + 7;
const int N = 1e5 + 10;
int n;
int where[2][N];
int cnt[2];
int main() {
scanf("%d", &n);
int x;
for(int i = 0; i < n; i++) {
scanf("%d", &x); x--;
where[x][++cnt[x]] = i;
}
vector <pair<int , int> > ans;
for(int i = 1; i <= max(cnt[0], cnt[1]); i++) {
int cur = 0;
int win1 = 0, win0 = 0, last;
int sofar0 = 0, sofar1 = 0;
while(cur < n) {
int p0 = sofar0 + i > cnt[0] ? n : where[0][sofar0 + i];
int p1 = sofar1 + i > cnt[1] ? n : where[1][sofar1 + i];
int p = min(p1, p0);
if(p == n) {
break;
} else if(p == p0) {
cur = p;
sofar0 += i;
sofar1 = cur + 1 - sofar0;
last = 0;
win0++;
} else {
cur = p;
sofar1 += i;
sofar0 = cur + 1 - sofar1;
last = 1;
win1++;
}
}
if(cur != n - 1) continue;
if(win0 == win1) continue;
if(last == 1 && win0 < win1)
ans.push_back(make_pair(win1, i));
else if(last == 0 && win0 > win1)
ans.push_back(make_pair(win0, i));
}
sort(ans.begin(), ans.end());
printf("%d\n", ans.size());
for(int i = 0; i < ans.size(); i++) {
printf("%d %d\n", ans[i].first, ans[i].second);
}
return 0;
}
CF496D——Tennis Game(高效,模拟)
最新推荐文章于 2022-10-31 07:35:20 发布