제출 #1056398

#제출 시각아이디문제언어결과실행 시간메모리
1056398TheQuantiX축구 경기장 (IOI23_soccer)C++17
24 / 100
4563 ms47444 KiB
#include "soccer.h" #include <bits/stdc++.h> using namespace std; using ll = long long; constexpr ll INF = 1000000000; ll n, m, q, k, x, y, a, b, c, d; vector< vector<int> > v; bool check(ll x, ll y) { if (x < 0 || x >= n) { return 0; } if (y < 0 || y >= n) { return 0; } if (v[x][y]) { return 0; } return 1; } int biggest_stadium(int N, std::vector<std::vector<int>> F) { n = N; v = F; ll trees = 0; ll mx = n * n; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (v[i][j]) { trees++; mx = min(mx, max({n * n - (i + 1) * (j + 1), n * n - (i + 1) * (n - j), n * n - (n - i) * (j + 1), n * n - (n - i) * (n - j)})); } } } if (trees <= 1) { return mx; } if (n <= 3) { ll ans = 0; for (int _ = 0; _ < (1 << (n * n)); _++) { vector< vector<ll> > mat(n, vector<ll>(n)); vector< pair<ll, ll> > vp; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if ((_ >> (i * n + j)) & 1) { mat[i][j] = 1; vp.push_back({i, j}); } } } bool fl = 1; for (int i = 0; i < vp.size(); i++) { if (v[vp[i].first][vp[i].second]) { fl = 0; break; } for (int j = i + 1; j < vp.size(); j++) { bool fl1 = 1, fl2 = 1; for (int i1 = min(vp[i].second, vp[j].second); i1 <= max(vp[i].second, vp[j].second); i1++) { fl1 &= mat[vp[i].first][i1]; } for (int i1 = min(vp[i].first, vp[j].first); i1 <= max(vp[i].first, vp[j].first); i1++) { fl1 &= mat[i1][vp[j].second]; } for (int i1 = min(vp[i].second, vp[j].second); i1 <= max(vp[i].second, vp[j].second); i1++) { fl2 &= mat[vp[j].first][i1]; } for (int i1 = min(vp[i].first, vp[j].first); i1 <= max(vp[i].first, vp[j].first); i1++) { fl2 &= mat[i1][vp[i].second]; } // if (!(mat[vp[i].first][vp[j].second] || mat[vp[j].first][vp[i].second])) { // fl = 0; // } fl &= (fl1 | fl2); } } if (fl) { ans = max(ans, (ll)vp.size()); } } return ans; } ll ans = 0; vector< pair<ll, ll> > vp; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (!v[i][j]) { vp.push_back({i, j}); } } } bool fl = 1; for (int i = 0; i < vp.size(); i++) { for (int j = i + 1; j < vp.size(); j++) { bool fl1 = 1, fl2 = 1; for (int i1 = min(vp[i].second, vp[j].second); i1 <= max(vp[i].second, vp[j].second); i1++) { fl1 &= !v[vp[i].first][i1]; } for (int i1 = min(vp[i].first, vp[j].first); i1 <= max(vp[i].first, vp[j].first); i1++) { fl1 &= !v[i1][vp[j].second]; } for (int i1 = min(vp[i].second, vp[j].second); i1 <= max(vp[i].second, vp[j].second); i1++) { fl2 &= !v[vp[j].first][i1]; } for (int i1 = min(vp[i].first, vp[j].first); i1 <= max(vp[i].first, vp[j].first); i1++) { fl2 &= !v[i1][vp[i].second]; } // if (!(mat[vp[i].first][vp[j].second] || mat[vp[j].first][vp[i].second])) { // fl = 0; // } fl &= (fl1 | fl2); } } if (fl) { ans = max(ans, (ll)vp.size()); } return ans; // int mnx = INF, mny = INF, mxx = -INF, mxy = -INF; // vector< vector<ll> > vec(n); // vector< pair<ll, ll> > vp(n); // for (int i = 0; i < n; i++) { // for (int j = 0; j < n; j++) { // // if (v[i][j] && ((check(i, j + 1) && check(i, j - 1)) || (check(i + 1, j) && check(i - 1, j)))) { // // return 0; // // } // if (!v[i][j]) { // mnx = min(mnx, i); // mxx = max(mxx, i); // mny = min(mny, j); // mxy = max(mxy, j); // vec[i].push_back(j); // } // } // } // for (int i = 1; i < n - 1; i++) { // if (vec[i].size() == 0 && vec[i - 1].size() > 0 && vec[i + 1].size() > 0) { // return 0; // } // } // for (int i = 0; i < n; i++) { // for (int j = 1; j < vec[i].size(); j++) { // if (vec[i][j - 1] + 1 != vec[i][j]) { // return 0; // } // } // if (vec[i].size() == 0) { // vp[i] = {INF, -INF}; // } // else { // vp[i] = {vec[i][0], vec[i][vec[i].size() - 1]}; // } // // cout << vp[i].first << ' ' << vp[i].second << '\n'; // } // bool fl = 0; // for (int i = 1; i < n; i++) { // if (fl == 0) { // if (!(vp[i].first <= vp[i - 1].first && vp[i].second >= vp[i - 1].second)) { // fl = 1; // } // } // else { // if (!(vp[i].first >= vp[i - 1].first && vp[i].second <= vp[i - 1].second)) { // return 0; // } // } // } // pair<int, int> mnxr = {INF, -INF}; // pair<int, int> mnyr = {INF, -INF}; // pair<int, int> mxxr = {INF, -INF}; // pair<int, int> mxyr = {INF, -INF}; // for (int i = 0; i < n; i++) { // for (int j = 0; j < n; j++) { // if (v[i][j]) { // continue; // } // if (i == mnx) { // mnxr = {min(mnxr.first, j), max(mnxr.second, j)}; // } // if (j == mny) { // mnyr = {min(mnyr.first, i), max(mnyr.second, i)}; // } // if (i == mxx) { // mxxr = {min(mxxr.first, j), max(mxxr.second, j)}; // } // if (j == mxy) { // mxyr = {min(mxyr.first, i), max(mxyr.second, i)}; // } // } // } // // cout << mnxr.first << ' ' << mnxr.second << '\n'; // // cout << mxxr.first << ' ' << mxxr.second << '\n'; // // cout << mnyr.first << ' ' << mnyr.second << '\n'; // // cout << mxyr.first << ' ' << mxyr.second << '\n'; // if (max(mnxr.second, mxxr.second) - min(mnxr.first, mxxr.first) > max(mnxr.second - mnxr.first, mxxr.second - mxxr.first)) { // return 0; // } // if (max(mnyr.second, mxyr.second) - min(mnyr.first, mxyr.first) > max(mnyr.second - mnyr.first, mxyr.second - mxyr.first)) { // return 0; // } // return n * n - trees; }

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

soccer.cpp: In function 'int biggest_stadium(int, std::vector<std::vector<int> >)':
soccer.cpp:55:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   55 |             for (int i = 0; i < vp.size(); i++) {
      |                             ~~^~~~~~~~~~~
soccer.cpp:60:39: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |                 for (int j = i + 1; j < vp.size(); j++) {
      |                                     ~~^~~~~~~~~~~
soccer.cpp:96:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   96 |     for (int i = 0; i < vp.size(); i++) {
      |                     ~~^~~~~~~~~~~
soccer.cpp:97:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   97 |         for (int j = i + 1; j < vp.size(); j++) {
      |                             ~~^~~~~~~~~~~
#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...