Submission #1076821

#TimeUsernameProblemLanguageResultExecution timeMemory
1076821mickey080929Soccer Stadium (IOI23_soccer)C++17
12 / 100
4598 ms6104 KiB
#include "soccer.h" #include <bits/stdc++.h> using namespace std; int dx[] = {1, -1, 0, 0}; int dy[] = {0, 0, 1, -1}; bool check(pair<int,int> u, pair<int,int> v, vector<vector<int>> &F) { if (u.first == v.first) { for (int i=min(u.second, v.second); i<=max(u.second, v.second); i++) { if (F[u.first][i] == 1) return 0; } } else if (u.second == v.second) { for (int i=min(u.first, v.first); i<=max(u.first, v.first); i++) { if (F[i][u.second] == 1) return 0; } } else assert(0); return 1; } int biggest_stadium(int N, vector<vector<int>> F) { vector<vector<int>> vis(N, vector<int>(N, 0)); queue<pair<int,int>> q; for (int i=0; i<N; i++) { for (int j=0; j<N; j++) { if (F[i][j] == 0) { vis[i][j] = 1; q.push({i, j}); break; } } if (!q.empty()) break; } while (!q.empty()) { int x = q.front().first; int y = q.front().second; q.pop(); for (int k=0; k<4; k++) { int nx = x + dx[k]; int ny = y + dy[k]; if (nx < 0 || nx >= N || ny < 0 || ny >= N) continue; if (vis[nx][ny]) continue; vis[nx][ny] = 1; q.push({nx, ny}); } } vector<pair<int,int>> blank; for (int i=0; i<N; i++) { for (int j=0; j<N; j++) { if (F[i][j] == 0 && vis[i][j] == 0) { return 0; } if (F[i][j] == 0) { blank.push_back({i, j}); } } } for (auto &u : blank) { for (auto &v : blank) { if (u == v) continue; if (u.first == v.first || u.second == v.second) { if (!check(u, v, F)) return 0; } else { bool f1 = check(u, {u.first, v.second}, F) && check({u.first, v.second}, v, F); bool f2 = check(u, {v.first, u.second}, F) && check({v.first, u.second}, v, F); if (!f1 && !f2) return 0; } } } return blank.size(); /*int tot = 0; bool flag = false; int pl = -1, pr = -1; vector<pair<int,int>> ran; for (int i=0; i<N; i++) { int l = -1, r = -1, cnt = 0; for (int j=0; j<N; j++) { if (F[i][j] == 0) { if (l == -1) l = j; r = j; cnt ++; } } if (cnt == 0) { pl = -1; pr = -1; continue; } ran.push_back({l, r}); if (r - l + 1 != cnt) { return 0; } if (pl != -1) { if (!flag) { if (l <= pl && pr <= r) {} else if (pl <= l && r <= pr) { flag = true; } else return 0; } else { if (pl <= l && r <= pr) {} else return 0; } } pl = l; pr = r; tot += cnt; } sort(ran.begin(), ran.end(), [&](pair<int,int> &u, pair<int,int> &v) { return u.second - u.first < v.second - v.first; }); for (int i=0; i+1<ran.size(); i++) { if (ran[i+1].first <= ran[i].first && ran[i].second <= ran[i+1].second) {} else return 0; } return tot;*/ }
#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...