Submission #1079639

#TimeUsernameProblemLanguageResultExecution timeMemory
1079639beaconmcSoccer Stadium (IOI23_soccer)C++17
30 / 100
4592 ms4572 KiB
#include "soccer.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; #define FOR(i,x,y) for(ll i=x; i<y; i++) #define FORNEG(i,x,y) for(ll i=x; i>y; i--) ll prefrow[2001][2001]; ll prefcol[2001][2001]; ll grid[2001][2001]; bool checkrow(ll a, ll b, ll row){ if (a>b) swap(a,b); return (prefrow[row][b] - prefrow[row][a] + grid[row][a] == 0); } bool checkcol(ll a, ll b, ll col){ if (a>b) swap(a,b); return (prefcol[b][col] - prefcol[a][col] + grid[a][col] == 0); } vector<array<ll,2>> possible; ll ans = 0; ll cnt =0 ; void idkman(vector<array<ll,2>>& sus, ll n, ll point){ if (sus.size()==n){ ll temp = 0; for (auto&i : sus) temp += i[1] - i[0]+1; array<ll,2> firsts,lasts; bool flag = 0; for (auto&i : sus){ for (auto&j : sus){ if (i == array<ll,2>{0,-1} || j==array<ll,2>{0,-1}) continue; if (!((i[0] <= j[0] && j[1] <= i[1]) || (j[0]<=i[0]&&i[1]<=j[1]))){ flag = 1; } } } if (!flag) ans = max(ans, temp); return; } cnt++; for (auto&i : possible){ if (i != array<ll,2>{0,-1} && prefrow[sus.size()][i[1]]-prefrow[sus.size()][i[0]]+grid[sus.size()][i[0]] != 0) continue; if (sus.size() && i != array<ll,2>{0,-1}){ ll left = sus[sus.size()-1][0]; ll right = sus[sus.size()-1][1]; if (!(left==0 && right==-1) && !(left<=i[0] && i[1] <= right) && sus.size()>point){ continue; } if (!(left==0 && right==-1) && !(i[0]<=left && right <= i[1]) && sus.size()<=point){ continue; } } if (sus.size() && i == array<ll,2>{0,-1} && sus[sus.size()-1] != i){ ll temp = 0; for (auto&i : sus) temp += i[1] - i[0]+1; array<ll,2> firsts,lasts; bool flag = 0; for (auto&i : sus){ for (auto&j : sus){ if (i == array<ll,2>{0,-1} || j==array<ll,2>{0,-1}) continue; if (!((i[0] <= j[0] && j[1] <= i[1]) || (j[0]<=i[0]&&i[1]<=j[1]))){ flag = 1; } } } if (!flag) ans = max(ans, temp); continue; } sus.push_back(i); idkman(sus, n, point); sus.pop_back(); } } int biggest_stadium(int N, std::vector<std::vector<int>> F) { possible.clear(); ans = 0; FOR(i,0,N){ FOR(j,0,N){ grid[i][j] = F[i][j]; } } FOR(i,0,N){ prefrow[i][0] = F[i][0]; FOR(j,1,N){ prefrow[i][j] = prefrow[i][j-1] + F[i][j]; } } FOR(j,0,N){ prefcol[0][j] = F[0][j]; FOR(i,1,N){ prefcol[i][j] = prefcol[i-1][j] + F[i][j]; } } FOR(i,0,N){ FOR(j,i,N){ possible.push_back({i,j}); } } possible.push_back({0,-1}); vector<array<ll,2>> lmao; FOR(i,0,N){ idkman(lmao, N, i); lmao.clear(); } // vector<vector<ll>> special; // FOR(i,a,b){ // FOR(j,c,d){ // temp -= grid[i][j]; // vector<vector<ll>> sus = {{i-1,j}, {i+1,j}, {i,j-1}, {i,j+1}}; // if (grid[i][j] != 1){ // bool flag = 0; // for (auto&k : sus){ // if (0<=k[0] && k[0]<N && 0<=k[1] && k[1]<N){ // if (grid[k[0]][k[1]]==1) flag = 1; // } // } // if (flag==1 || i==0 || i==N-1 || j==0 || j==N-1) special.push_back({i,j}); // } // } // } // bool flag = false; // for (auto&X : special){ // for (auto&Y : special){ // ll i = X[0], j = X[1], k = Y[0], l= Y[1]; // if (grid[i][j]==1 || grid[k][l] == 1) continue; // bool check1 = (checkrow(l, j, i) && checkcol(k, i, l)); // bool check2 = (checkrow(l, j, k) && checkcol(k, i, j)); // if (!check1 && !check2) flag = true; // } // } // if (!flag) ans = max(ans, temp); return ans; }

Compilation message (stderr)

soccer.cpp: In function 'void idkman(std::vector<std::array<long long int, 2> >&, ll, ll)':
soccer.cpp:41:19: warning: comparison of integer expressions of different signedness: 'std::vector<std::array<long long int, 2> >::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
   41 |     if (sus.size()==n){
      |         ~~~~~~~~~~^~~
soccer.cpp:47:21: warning: unused variable 'firsts' [-Wunused-variable]
   47 |         array<ll,2> firsts,lasts;
      |                     ^~~~~~
soccer.cpp:47:28: warning: unused variable 'lasts' [-Wunused-variable]
   47 |         array<ll,2> firsts,lasts;
      |                            ^~~~~
soccer.cpp:74:88: warning: comparison of integer expressions of different signedness: 'std::vector<std::array<long long int, 2> >::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
   74 |             if (!(left==0 && right==-1) && !(left<=i[0] && i[1] <= right) && sus.size()>point){
      |                                                                              ~~~~~~~~~~^~~~~~
soccer.cpp:77:88: warning: comparison of integer expressions of different signedness: 'std::vector<std::array<long long int, 2> >::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
   77 |             if (!(left==0 && right==-1) && !(i[0]<=left && right <= i[1]) && sus.size()<=point){
      |                                                                              ~~~~~~~~~~^~~~~~~
soccer.cpp:89:25: warning: unused variable 'firsts' [-Wunused-variable]
   89 |             array<ll,2> firsts,lasts;
      |                         ^~~~~~
soccer.cpp:89:32: warning: unused variable 'lasts' [-Wunused-variable]
   89 |             array<ll,2> firsts,lasts;
      |                                ^~~~~
#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...