#include "soccer.h"
#include "bits/stdc++.h"
using namespace std;
using i32 = int;
#define int long long
#define len(x) (int)(x.size())
#define all(x) x.begin(), x.end()
#define inf 1000'000'000'000'000'000LL
#define bit(x, i) (((x) >> i) & 1)
template<typename T>
using vec = vector<T>;
int check(i32 n, std::vector<std::vector<i32>> F) {
int cnt = 0;
set<int> columns;
set<int> rows;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cnt += F[i][j] == 0;
if (F[i][j] == 0) {
rows.insert(i);
columns.insert(j);
}
}
}
vec<vec<bool>> used(n, vec<bool>(n, false));
for (int i = 1; i < n; i++) {
for (int j = 0; j < n; j++) {
if (used[i][j]) continue;
if (!F[i][j]) continue;
if (F[i - 1][j] == 0) {
for (int k = i; k < n; k++) {
if (F[k][j] == 0) return 0;
used[k][j] = true;
}
}
}
}
used = vec<vec<bool>>(n, vec<bool>(n, false));
for (int i = 0; i < n; i++) {
for (int j = 1; j < n; j++) {
if (used[i][j]) continue;
if (!F[i][j]) continue;
if (F[i][j - 1] == 0) {
for (int k = j; k < n; k++) {
if (F[i][k] == 0) return 0;
used[i][k] = true;
}
}
}
}
vec<vec<int>> pref(n + 1, vec<int>(n + 1, 0));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
pref[i + 1][j + 1] = pref[i][j + 1] + pref[i + 1][j] - pref[i][j] + F[i][j];
}
}
auto get = [&](int i1, int j1, int i2, int j2) {
return pref[i2 + 1][j2 + 1] - pref[i2 + 1][j1] - pref[i1][j2 + 1] + pref[i1][j1];
};
vec<pair<int, int>> X(n, {inf, -inf});
vec<pair<int, int>> Y(n, {inf, -inf});
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (F[i][j]) continue;
X[i].first = min(X[i].first, j);
X[i].second = max(X[i].first, j);
Y[j].first = min(Y[j].first, i);
Y[j].second = max(Y[j].first, i);
}
}
for (int i: rows) {
for (int j: columns) {
if (F[i][j] == 0) continue;
int i1 = Y[j].first;
int i2 = Y[j].second;
int j1 = X[i].first;
int j2 = X[i].second;
if (get(i1, j1, i2, j2) != 0)
return 0;
}
}
return cnt;
}
i32 biggest_stadium(i32 n, std::vector<std::vector<i32>> F) {
int best = 0;
auto cF = F;
for (int mask = 0; mask < 1 << (n * n); mask++) {
F = cF;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int id = i * n + j;
if (bit(mask, id)) F[i][j] = 1;
}
}
best = max(best,check(n,F));
}
return best;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
4552 ms |
348 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
348 KB |
ok |
2 |
Correct |
1 ms |
348 KB |
ok |
3 |
Correct |
306 ms |
348 KB |
ok |
4 |
Correct |
1 ms |
348 KB |
ok |
5 |
Correct |
1 ms |
348 KB |
ok |
6 |
Correct |
1 ms |
348 KB |
ok |
7 |
Execution timed out |
4509 ms |
600 KB |
Time limit exceeded |
8 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
348 KB |
ok |
2 |
Correct |
1 ms |
348 KB |
ok |
3 |
Correct |
1 ms |
344 KB |
ok |
4 |
Correct |
1 ms |
348 KB |
ok |
5 |
Correct |
1 ms |
348 KB |
ok |
6 |
Correct |
1 ms |
348 KB |
ok |
7 |
Correct |
1 ms |
348 KB |
ok |
8 |
Correct |
1 ms |
348 KB |
ok |
9 |
Correct |
1 ms |
348 KB |
ok |
10 |
Correct |
1 ms |
348 KB |
ok |
11 |
Correct |
1 ms |
348 KB |
ok |
12 |
Correct |
0 ms |
348 KB |
ok |
13 |
Correct |
1 ms |
348 KB |
ok |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
4552 ms |
348 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
4552 ms |
348 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
4552 ms |
348 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
4552 ms |
348 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |