#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define pb push_back
#define ff first
#define ss second
int biggest_stadium(int n, vector<vector<int>> FF){
vector<vector<int>> F(n + 1, vector<int>(n + 1)), P(n + 1, vector<int>(n + 1));
for (int i = 1; i <= n; i++){
for (int j = 1; j <= n; j++){
F[i][j] = FF[i - 1][j - 1];
P[i][j] = P[i][j - 1] + !F[i][j];
}
}
int M = 1e9, K = 0, C = 0;
for (int i = 1; i <= n; i++){
if (P[i][n]){
M = min(M, i);
K = max(K, i);
C++;
}
}
if (C == (K - M + 1)){
vector<pii> all;
bool TT = 1;
int L = 0, R = 0, I = 0;
for (int i = M; i <= K; i++){
int mn = 1e9, mx = 0;
for (int j = 1; j <= n; j++){
if (!F[i][j]){
mn = min(mn, j);
mx = max(mx, j);
}
}
if (P[i][n] != (mx - mn + 1)){
TT = 0;
break;
}
all.pb({mn, mx});
if (i == M){
L = mn; R = mx;
}
else {
if (!I){
if (mn <= L && R <= mx){
L = mn; R = mx;
}
else {
if (L <= mn && mx <= R){
I = 1;
L = mn; R = mx;
}
else {
TT = 0;
break;
}
}
}
else {
if (L <= mn && mx <= R){
L = mn; R = mx;
}
else {
TT = 0;
break;
}
}
}
}
if (TT){
auto cmp = [&](pii x, pii y){
if (x.ff != y.ff) return x.ff < y.ff;
return x.ss > y.ss;
};
sort(all.begin(), all.end(), cmp);
for (int i = 0; i + 1 < all.size(); i++){
if (all[i].ss < all[i + 1].ss){
return 0;
}
}
int out = 0;
for (int i = 1; i <= n; i++) out += P[i][n];
return out;
}
}
if (n > 7) return 0;
int tot = 0, out = 0;
vector<pii> all;
function<void(int, int, int, bool)> gen = [&](int i, int l, int r, bool I){
out = max(out, tot);
// cout<<"! "<<i<<" "<<l<<" "<<r<<" "<<tot<<" "<<I<<"\n";
if (i == n) return;
if (!I){
for (int l1 = 1; l1 <= l; l1++){
for (int r1 = max(l1, r); r1 <= n; r1++){
if (P[i + 1][r1] == P[i + 1][l1 - 1]){
bool H = 0;
for (auto [L, R]: all){
if (L == l1 || R == r1) continue;
bool I1 = (l1 < L), I2 = (r1 < R);
if (I1 == I2){
H = 1;
}
}
if (H) continue;
all.pb({l1, r1});
tot += (r1 - l1 + 1);
gen(i + 1, l1, r1, 0);
tot -= (r1 - l1 + 1);
all.pop_back();
}
}
}
for (int l1 = l; l1 <= r; l1++){
for (int r1 = l1; r1 <= r; r1++){
if (P[i + 1][r1] == P[i + 1][l1 - 1]){
bool H = 0;
for (auto [L, R]: all){
if (L == l1 || R == r1) continue;
bool I1 = (l1 < L), I2 = (r1 < R);
if (I1 == I2){
H = 1;
}
}
if (H) continue;
all.pb({l1, r1});
tot += (r1 - l1 + 1);
gen(i + 1, l1, r1, 1);
tot -= (r1 - l1 + 1);
all.pop_back();
}
}
}
}
else {
for (int l1 = l; l1 <= r; l1++){
for (int r1 = l1; r1 <= r; r1++){
if (P[i + 1][r1] == P[i + 1][l1 - 1]){
bool H = 0;
for (auto [L, R]: all){
if (L == l1 || R == r1) continue;
bool I1 = (l1 < L), I2 = (r1 < R);
if (I1 == I2){
H = 1;
}
}
if (H) continue;
all.pb({l1, r1});
tot += (r1 - l1 + 1);
gen(i + 1, l1, r1, 1);
tot -= (r1 - l1 + 1);
all.pop_back();
}
}
}
}
};
for (int i = 0; i < n; i++){
tot = 0;
gen(i, n, 1, 0);
}
return out;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |