Submission #1158037

#TimeUsernameProblemLanguageResultExecution timeMemory
1158037PacybwoahCoin Collecting (JOI19_ho_t4)C++20
100 / 100
34 ms9032 KiB
#include<iostream> #include<algorithm> #include<utility> #include<vector> #include<cmath> using namespace std; typedef long long ll; const ll inf = 1e18; int main(){ ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector<pair<ll, ll>> vec(2 * n); for(int i = 0; i < 2 * n; i++) cin >> vec[i].first >> vec[i].second; vector<vector<ll>> grid(n + 1, vector<ll>(3)); ll ans = 0; for(auto &[x, y]: vec){ int nx, ny; if(x < 1){ nx = 1; ans += 1 - x; } else if(x > n){ nx = n; ans += x - n; } else nx = x; if(y >= 2){ ans += y - 2; ny = 2; } else{ ans += 1 - y; ny = 1; } grid[nx][ny]++; } int cur = 0; for(int i = 1; i <= n; i++){ cur += grid[i][1]; cur += grid[i][2]; int tar = cur - 2 * i; ans += abs(tar); //cout << cur << " " << tar << "\n"; if(tar > 0){ if(grid[i][1] > 1){ if(grid[i][1] - 1 > tar){ grid[i][1] -= tar; grid[i + 1][1] += tar; tar = 0; } else{ grid[i + 1][1] += grid[i][1] - 1; tar -= grid[i][1] - 1; grid[i][1] = 1; } } if(grid[i][2] > 1){ if(grid[i][2] - 1 > tar){ grid[i][2] -= tar; grid[i + 1][2] += tar; tar = 0; } else{ grid[i + 1][2] += grid[i][2] - 1; tar -= grid[i][2] - 1; grid[i][2] = 1; } } } if(tar < 0){ tar = -tar; if(grid[i][1] < 1){ if(1 - grid[i][1] > tar){ grid[i][1] += tar; grid[i + 1][1] -= tar; tar = 0; } else{ grid[i + 1][1] -= 1 - grid[i][1]; tar -= 1 - grid[i][1]; grid[i][1] = 1; } } if(grid[i][2] < 1){ if(1 - grid[i][2] > tar){ grid[i][2] += tar; grid[i + 1][2] -= tar; tar = 0; } else{ grid[i + 1][2] -= 1 - grid[i][2]; tar -= 1 - grid[i][2]; grid[i][2] = 1; } } } ans += abs(grid[i][1] - 1); cur = 2 * i; } cout << ans << "\n"; } // g++ -std=c++17 -Wall -Wextra -Wshadow -fsanitize=undefined -fsanitize=address -o run pD.cpp
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...