Submission #1242719

#TimeUsernameProblemLanguageResultExecution timeMemory
1242719LeonidCukSoccer Stadium (IOI23_soccer)C++17
13.50 / 100
4613 ms888040 KiB
#include "soccer.h"
#include <bits/stdc++.h>
using namespace std;
int n,res=0;
vector<vector<int>>v,pref,pref1;
vector<vector<bool>>g;
void izracuni()
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            pref[i][j+1]=pref[i][j]+v[i][j];
            pref1[i+1][j]=pref1[i][j]+v[i][j];
        }
    }
}
int najdi(int l1,int r1,int l2,int r2)
{
    if(r1==r2)return pref1[max(l1,l2)+1][r1]-pref1[min(l1,l2)][r1];
    else return pref[l1][max(r1,r2)+1]-pref[l1][min(r1,r2)];
}
void proveri(int x1,int x2)
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(v[i][j]==0)
            {
                if(najdi(x1,x2,x1,j)+najdi(x1,j,i,j)==0||najdi(x1,x2,i,x2)+najdi(i,x2,i,j)==0)
                {
                    g[n*i+j][n*x1+x2]=true;
                    g[n*x1+x2][n*i+j]=true;
                }
            }
        }
    }
}
void lettry(vector<int>v1,vector<int>v2)
{
    if(v1.size()+v2.size()<=res)return;
    if(v2.empty())
    {
        res=max(res,int(v1.size()));return;
    }
    for(int i=0;i<v2.size();i++)
    {
        vector<int>vn1=v1,vn2;
        vn1.push_back(v2[i]);
        for(int j=i+1;j<v2.size();j++)if(g[v2[i]][v2[j]])vn2.push_back(v2[j]);
        lettry(vn1,vn2);
    }
}
int biggest_stadium(int N,vector<vector<int>> G)
{
    n=N;
    v=G;
    pref.resize(n+1,vector<int>(n+1));
    pref1.resize(n+1,vector<int>(n+1));
    g.resize(n*n,vector<bool>(n*n));
    vector<int>temp,temp1;
    izracuni();
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(v[i][j]==0)
            {
                proveri(i,j);
                temp.push_back(n*i+j);
            }
        }
    }
    lettry(temp1,temp);
    return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...