제출 #944408

#제출 시각아이디문제언어결과실행 시간메모리
944408Nhoksocqt1축구 경기장 (IOI23_soccer)C++17
1.50 / 100
254 ms43604 KiB
#include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f #define sz(x) int((x).size()) #define fi first #define se second typedef long long ll; typedef pair<int, int> ii; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int Random(int l, int r) { return uniform_int_distribution<int>(l, r)(rng); } const int MAXN = 2003; const int lx[] = {-1, 0, 0, 1}, ly[] = {0, -1, 1, 0}; ii range[MAXN]; int nSize; bool isTree[MAXN][MAXN]; int biggest_stadium(int n, vector<vector<int>> F) { nSize = n; int cntTree(0); for (int i = 1; i <= nSize; ++i) { for (int j = 1; j <= nSize; ++j) { isTree[i][j] = (F[i - 1][j - 1]); cntTree += isTree[i][j]; } } int minL(nSize), maxR(0); bool hasOk(0), check(1); for (int i = 1; i <= nSize; ++i) { bool hasEmpty(0); for (int j = 1; j <= nSize; ++j) { if(hasEmpty && isTree[i][j - 1] && !isTree[i][j]) check = 0; hasEmpty |= (!isTree[i][j]); if(!isTree[i][j]) { range[i].se = j; if(!range[i].fi) range[i].fi = j; } } if(hasOk && range[i].fi > 0 && range[i - 1].fi == 0) check = 0; hasOk |= (range[i].fi > 0); if(range[i].fi > 0) minL = min(minL, range[i].fi); maxR = max(maxR, range[i].se); } int upL(-1), upR(-1), downL(-1), downR(-1); int leftL(-1), leftR(-1), rightL(-1), rightR(-1); for (int i = 1; i <= nSize; ++i) { if(range[i].fi == 0) continue; if(upL < 0) upL = range[i].fi, upR = range[i].se; downL = range[i].fi, downR = range[i].se; if(range[i].fi == minL) { leftR = i; if(leftL < 0) leftL = i; } if(range[i].se == maxR) { rightR = i; if(rightL < 0) rightL = i; } } if(!(leftL <= rightL && rightR <= leftR || rightL <= leftL && leftR <= rightR)) check = 0; if(!(upL <= downL && downR <= upR || downL <= upL && upR <= downR)) check = 0; if(cntTree == 0 || check) return nSize * nSize - cntTree; return 1; } #ifdef Nhoksocqt1 int main(void) { ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0); #define TASK "soccer" if(fopen(TASK".inp", "r")) { freopen(TASK".inp", "r", stdin); freopen(TASK".out", "w", stdout); } vector<vector<int>> F; int n; cin >> n; F.resize(n); for (int i = 0; i < n; ++i) { F[i].resize(n); for (int j = 0; j < n; ++j) cin >> F[i][j]; } int ans = biggest_stadium(n, F); cout << "ANSWER: " << ans << '\n'; return 0; } #endif // Nhoksocqt1

컴파일 시 표준 에러 (stderr) 메시지

soccer.cpp: In function 'int biggest_stadium(int, std::vector<std::vector<int> >)':
soccer.cpp:83:26: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   83 |     if(!(leftL <= rightL && rightR <= leftR || rightL <= leftL && leftR <= rightR))
      |          ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
soccer.cpp:86:23: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   86 |     if(!(upL <= downL && downR <= upR || downL <= upL && upR <= downR))
      |          ~~~~~~~~~~~~~^~~~~~~~~~~~~~~
#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...