This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 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... |