제출 #1126433

#제출 시각아이디문제언어결과실행 시간메모리
1126433dubabubaCoin Collecting (JOI19_ho_t4)C++20
0 / 100
3 ms3400 KiB
#include <bits/stdc++.h> using namespace std; #define int long long typedef const int cint; typedef pair<int, int> pii; #define ff first #define ss second const int mxn = 2e5 + 10; int n, cnt[10][mxn], ans; void near(cint x, cint y, int &X, int &Y) { X = x, Y = y; if(x < 1) X = 1; if(x > n) X = n; if(y < 1) Y = 1; if(y > 2) Y = 2; } int dis(int x, int y, int X, int Y) { return abs(x - X) + abs(y - Y); } void debug() { for(int x = 1; x <= n; x++) cout << cnt[1][x] << ' '; cout << endl; for(int x = 1; x <= n; x++) cout << cnt[2][x] << ' '; cout << endl; } void solve(int cnt[]) { // cout << "solving...\n"; map<int, int> mp; for(int x = 1; x <= n; x++) { // cout << cnt[x] << ' '; if(cnt[x] > 0) { mp[x] = cnt[x]; } } // cout << endl; for(int x = 1; x <= n; x++) { if(cnt[x] > -1) continue; while(cnt[x] < 0) { pii p = *mp.begin(); ans += abs(p.ff - x); if(p.ss > 1) mp[p.ff]--; else mp.erase(mp.find(p.ff)); cnt[x]++; } } } int32_t main() { cin >> n; memset(cnt[1], -1, sizeof cnt[1]); memset(cnt[2], -1, sizeof cnt[2]); for(int i = 0; i < 2 * n; i++) { int x, y, nx, ny; cin >> x >> y; near(x, y, nx, ny); cnt[ny][nx]++; ans += dis(x, y, nx, ny); } // debug(); // cout << ans << endl; int cnt1 = 0, cnt2 = 0; int ext1 = 0, ext2 = 0; for(int x = 1; x <= n; x++) { if(cnt[1][x] == -1) cnt1++; else ext1 += cnt[1][x]; if(cnt[2][x] == -1) cnt2++; else ext2 += cnt[2][x]; } int diff = ext1 - cnt1; if(diff < 0) { swap(cnt[1], cnt[2]); diff = -diff; } // debug(); // cout << ans << endl; for(int x = 1; x <= n; x++) cnt[3][x] = cnt[1][x] + cnt[2][x]; solve(cnt[3]); ans += diff; cout << ans << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...