#include "soccer.h"
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
int biggest(int N, std::vector<std::vector<int>> F){
pair<int,int> tab[2][N];
int ans=0;
for (int i = 0; i < N; ++i){
tab[0][i].fi=tab[1][i].fi=1e9;
tab[0][i].se=tab[1][i].se=-1e9;
}
for (int i = 0; i < N; ++i)
{
bool test=false;
bool test1=false;
for (int j = 0; j < N; ++j)
{
if(F[i][j]==0){
tab[0][i].fi=min(tab[0][i].fi,j);
tab[0][i].se=max(tab[0][i].se,j);
ans++;
}
if(F[i][j]==0){
test=true;
}
if(F[i][j]==1&&test){
test1=true;
}
if(F[i][j]==0&&test1) return 0;
}
}
for (int i = 0; i < N; ++i)
{
bool test=false;
bool test1=false;
for (int j = 0; j < N; ++j)
{
if(F[j][i]==0){
tab[1][i].fi=min(tab[1][i].fi,j);
tab[1][i].se=max(tab[1][i].se,j);
}
if(F[j][i]==0) {
test=true;
}
if(F[j][i]==1&&test) {
test1=true;
}
if(F[j][i]==0&&test1) return 0;
}
}
for (int i = 0; i < N; ++i)
{
if(tab[0][i].fi==1e9) continue;
for (int j = 0; j < N; ++j)
{
if(tab[0][j].fi==1e9) continue;
if (!((tab[0][i].fi<=tab[0][j].fi&&tab[0][i].se>=tab[0][j].se)||(tab[0][j].fi<=tab[0][i].fi&&tab[0][j].se>=tab[0][i].se))){
return 0;
}
}
}
for (int i = 0; i < N; ++i)
{
if(tab[1][i].fi==1e9) continue;
for (int j = 0; j < N; ++j)
{
if(tab[1][j].fi==1e9) continue;
if (!((tab[1][i].fi<=tab[1][j].fi&&tab[1][i].se>=tab[1][j].se)||(tab[1][j].fi<=tab[1][i].fi&&tab[1][j].se>=tab[1][i].se))){
return 0;
}
}
}
return ans;
}
int res=0;
int n;
vector<pair<int,int>> arr[10];
vector<pair<int,int>> cur;
void dfs(int x){
if(x==n) {
vector<vector<int>> F(n,vector<int> (n));
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
if(cur[i].fi<=j&&j<=cur[i].se) F[i][j]=0;
else F[i][j]=1;
}
}
res=max(res,biggest(n,F));
return;
}
for(auto u:arr[x]){
cur.push_back(u);
dfs(x+1);
cur.pop_back();
}
}
int biggest_stadium(int N, std::vector<std::vector<int>> F){
n=N;
for (int i = 0; i < N; ++i)
{
arr[i].push_back({-1,-1});
bool test=false;
for (int j = 0; j < N; ++j)
{
if(!test&&F[i][j]==0){
arr[i].push_back({j,j});
test=true;
}if(test&&F[i][j]){
arr[i].back().se=j-1;
test=false;
}
}
if(test) arr[i].back().se=N-1;
}
set<pair<int,int>> total;
for (int i = 0; i < N; ++i)
{
for(auto u:arr[i]) total.insert(u);
}
for (int i = 0; i < N; ++i)
{
for(auto u:arr[i]){
for(auto j:total){
if(min(u.se,j.se)>=max(u.fi,j.fi)&&u!=j) arr[i].push_back({max(u.fi,j.fi),min(u.se,j.se)});
}
}
}
dfs(0);
return res;
}
# | 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... |