Submission #1079740

#TimeUsernameProblemLanguageResultExecution timeMemory
1079740LoboSoccer Stadium (IOI23_soccer)C++17
1.50 / 100
272 ms31828 KiB
#include "soccer.h" #include<bits/stdc++.h> using namespace std; const long long inf = 1e18 + 10; const int inf1 = 1e9 + 10; #define int long long #define dbl long double #define endl '\n' #define sc second #define fr first #define mp make_pair #define pb push_back #define all(x) x.begin(), x.end() mt19937_64 rng(chrono::system_clock::now().time_since_epoch().count()); const int maxn = -1; int32_t biggest_stadium(int32_t n, std::vector<std::vector<int32_t>> F) { int ans = 1; int ansqtd = 0; { vector<int> mnl(n),mxl(n),qtdl(n); for(int i = 0; i < n; i++) { mnl[i] = inf; mxl[i] = -inf; qtdl[i] = 0; for(int j = 0; j < n; j++) { if(F[i][j] == 0) { ansqtd++; qtdl[i]++; mnl[i] = min(mnl[i],j); mxl[i] = max(mxl[i],j); } } } int difmn = 0; int difmx = 0; // +1 -> increasing // 0 -> equal // -1 -> decreasing for(int i = 0; i < n; i++) { if(qtdl[i] != 0 and qtdl[i] != mxl[i]-mnl[i]+1) { ans = 0; } int difmn1 = 0; int difmx1 = 0; if(i != 0) { if(mnl[i] < mnl[i-1]) difmn1 = 1; // increasing if(mnl[i] > mnl[i-1]) difmn1 = -1; // decreasing if(mxl[i] > mxl[i-1]) difmx1 = 1; // increasing if(mxl[i] < mxl[i-1]) difmx1 = -1; // decreasing } if(difmn == -1 and difmn1 == 1) { ans = 0; } if(difmx == -1 and difmx1 == 1) { ans = 0; } if(difmn1 == -1 and (difmx1 == 1 or difmx == 1)) { ans = 0; } if(difmx1 == -1 and (difmn1 == 1 or difmn == 1)) { ans = 0; } if(difmn1 != 0) difmn = difmn1; if(difmx1 != 0) difmx = difmx1; } } for(int i = 0; i < n ; i++) { for(int j = 0; j < n; j++) { if(i < j) swap(F[i][j],F[j][i]); } } { vector<int> mnl(n),mxl(n),qtdl(n); for(int i = 0; i < n; i++) { mnl[i] = inf; mxl[i] = -inf; qtdl[i] = 0; for(int j = 0; j < n; j++) { if(F[i][j] == 0) { qtdl[i]++; mnl[i] = min(mnl[i],j); mxl[i] = max(mxl[i],j); } } } int difmn = 0; int difmx = 0; // +1 -> increasing // 0 -> equal // -1 -> decreasing for(int i = 0; i < n; i++) { if(qtdl[i] != 0 and qtdl[i] != mxl[i]-mnl[i]+1) { ans = 0; } int difmn1 = 0; int difmx1 = 0; if(i != 0) { if(mnl[i] < mnl[i-1]) difmn1 = 1; // increasing if(mnl[i] > mnl[i-1]) difmn1 = -1; // decreasing if(mxl[i] > mxl[i-1]) difmx1 = 1; // increasing if(mxl[i] < mxl[i-1]) difmx1 = -1; // decreasing } if(difmn == -1 and difmn1 == 1) { ans = 0; } if(difmx == -1 and difmx1 == 1) { ans = 0; } if(difmn1 == -1 and (difmx1 == 1 or difmx == 1)) { ans = 0; } if(difmx1 == -1 and (difmn1 == 1 or difmn == 1)) { ans = 0; } if(difmn1 != 0) difmn = difmn1; if(difmx1 != 0) difmx = difmx1; } } if(ans) return ansqtd; return 0; }
#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...