Submission #439212

#TimeUsernameProblemLanguageResultExecution timeMemory
439212elazarkorenT-Covering (eJOI19_covering)C++17
0 / 100
4 ms332 KiB
#include <iostream> #include <vector> #include <algorithm> #include <set> #define x first #define y second #define chkmin(a, b) a = min(a, b) #define chkmax(a, b) a = max(a, b) #define all(v) v.begin(), v.end() using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<vi> vvi; typedef pair<int, int> pii; typedef vector<pii> vii; typedef vector<bool> vb; typedef vector<vb> vvb; const int infinity = 1e9; int x; int Solve(vi &curr, vi &special, vvi &board) { if (curr.empty()) return 0; set<pii> p; int min_val = infinity; int sum = 0; for (int i : curr) { int y = special[i]; p.insert({x, y - 1}), p.insert({x, y + 1}); } curr.clear(); return 0; } int main() { int n, m; cin >> n >> m; vvi board(n, vi(m)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> board[i][j]; } } int k; cin >> k; vi special(k); vb visited(m); for (int i = 0; i < k; i++) { cin >> x >> special[i]; visited[special[i]] = true; } sort(all(special)); int ans = 0; vb put(k); while (true) { bool is_new = false; for (int i = 0; i < k; i++) { if (put[i]) continue; int y = special[i]; int sum = board[x][y], min_val = infinity, bad = 4; if (x) { sum += board[x - 1][y]; bad--; chkmin(min_val, board[x - 1][y]); } if (x < n - 1) { sum += board[x + 1][y]; bad--; chkmin(min_val, board[x + 1][y]); } if (y && !visited[y - 1]) { sum += board[x][y - 1]; bad--; chkmin(min_val, board[x][y - 1]); } if (y < m - 1 && !visited[y + 1]) { sum += board[x][y + 1]; bad--; chkmin(min_val, board[x][y + 1]); } if (bad == 1) { ans += sum; visited[y - 1] = true; visited[y + 1] = true; is_new = true; put[i] = true; } else if (bad > 1) { cout << "No"; return 0; } else if ((!i || special[i] - special[i - 1] > 2) && (i == k - 1 || special[i + 1] - special[i] > 2)) { ans += sum - min_val; visited[y - 1] = true; visited[y + 1] = true; is_new = true; put[i] = true; } } if (!is_new) break; } int last = 0; for (int i = 0; i < k; i++) { if (put[i]) { last = i + 1; continue; } if (i < k - 1 && special[i + 1] == special[i] + 2 && !put[i + 1]) { last = i + 1; continue; } int sum = 0; int min_val = infinity; for (int j = last; j <= i; j++) { int y = special[j]; chkmin(min_val, board[x - 1][y]); chkmin(min_val, board[x + 1][y]); chkmin(min_val, board[x][y - 1]); sum += board[x - 1][y] + board[x + 1][y] + board[x][y - 1] + board[x][y]; } chkmin(min_val, board[x][special[i] + 1]); sum += board[x][special[i] + 1]; ans += sum - min_val; last = i + 1; } // vi curr; // for (int i = 0; i < n; i++) { // int y = special[i]; // int sum = board[x][y], min_val = infinity, bad = 4; // if (x) { // sum += board[x - 1][y]; // bad--; // chkmin(min_val, board[x - 1][y]); // } // if (x < n - 1) { // sum += board[x + 1][y]; // bad--; // chkmin(min_val, board[x + 1][y]); // } // if (y && !visited[y - 1]) { // sum += board[x][y - 1]; // bad--; // chkmin(min_val, board[x][y - 1]); // } // if (y < m - 1 && !visited[y + 1]) { // sum += board[x][y + 1]; // bad--; // chkmin(min_val, board[x][y + 1]); // } // if (bad > 1) { // cout << "No"; // return 0; // } else if (bad == 1) { // Solve(curr, special, board); // ans += sum; // } else { // curr.push_back(i); // if (i < n - 1 && special[i + 1] - special[i] > 2) { // Solve(curr, special, board); // } // } // } cout << ans; }

Compilation message (stderr)

covering.cpp: In function 'int Solve(vi&, vi&, vvi&)':
covering.cpp:26:9: warning: unused variable 'min_val' [-Wunused-variable]
   26 |     int min_val = infinity;
      |         ^~~~~~~
covering.cpp:27:9: warning: unused variable 'sum' [-Wunused-variable]
   27 |     int sum = 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...