Submission #127219

#TimeUsernameProblemLanguageResultExecution timeMemory
127219RockyBCoin Collecting (JOI19_ho_t4)C++17
0 / 100
2 ms376 KiB
/// In The Name Of God //#pragma GCC optimize("Ofast") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native") //#pragma GCC optimize("unroll-loops") #include <bits/stdc++.h> #define f first #define s second #define pb push_back #define pp pop_back #define mp make_pair #define sz(x) (int)x.size() #define sqr(x) ((x) * 1ll * (x)) #define all(x) x.begin(), x.end() #define rep(i, l, r) for (int i = (l); i <= (r); i++) #define per(i, l, r) for (int i = (l); i >= (r); i--) #define Kazakhstan ios_base :: sync_with_stdio(0), cin.tie(0), cout.tie(0); #define nl '\n' #define ioi exit(0); typedef long long ll; typedef long double ld; typedef unsigned long long ull; const int N = (int)2e5 + 7; const int inf = (int)1e9 + 7; const int mod = (int)1e9 + 7; const ll linf = (ll)1e18 + 7; const int dx[] = {-1, 0, 1, 0, 1, -1, -1, 1}; const int dy[] = {0, 1, 0, -1, 1, -1, 1, -1}; using namespace std; int n; pair <ll, ll> a[N << 1]; ll dst(pair <ll, ll> x, pair <ll, ll> y) { return abs(x.f - y.f) + abs(x.s - y.s); } int cnt[N][3]; ll go1(int x, int y) { ll mn = linf; pair <int, int> go = {-1, -1}; rep(j, 1, 2) { rep(i, 1, n) { if (!cnt[i][j]) { ll cur = dst({x, y}, {i, j}); if (cur < mn) { mn = cur; go = {i, j}; } } } } cnt[go.f][go.s]++; return mn; } ll go2(int x, int y) { ll mn = linf; pair <int, int> go = {-1, -1}; per(j, 2, 1) { rep(i, 1, n) { if (!cnt[i][j]) { ll cur = dst({x, y}, {i, j}); if (cur < mn) { mn = cur; go = {i, j}; } } } } cnt[go.f][go.s]++; return mn; } ll fnd(int x, int y) { ll mn = linf; pair <int, int> go = {-1, -1}; rep(i, 1, n) { rep(j, 1, 2) { if (cnt[i][j] > 1) { ll cur = dst({i, j}, {x, y}); if (cur < mn) { mn = cur; go = {i, j}; } } } } cnt[go.f][go.s]--; return mn; } int main() { #ifdef IOI freopen ("in.txt", "r", stdin); freopen ("D.out", "w", stdout); #endif Kazakhstan cin >> n; rep(i, 1, n << 1) { cin >> a[i].f >> a[i].s; } sort (a + 1, a + n + n + 1); ll ans = 0; rep(i, 1, n << 1) { ll mn = linf; pair <int, int> go = {-1, -1}; rep(x, 1, n) { rep(y, 1, 2) { ll cur = dst(a[i], {x, y}); if (cur < mn) { mn = cur; go = {x, y}; } } } ans += mn; cnt[go.f][go.s]++; // cerr << a[i].f << ' ' << a[i].s << " -> " << go.f << ' ' << go.s << nl; } /* per(j, 2, 1) { rep(i, 1, n) { cerr << cnt[i][j] << ' '; } cerr << nl; } */ // cerr << ans << nl; rep(i, 1, n) { rep(j, 1, 2) { if (!cnt[i][j]) { ans += fnd(i, j); cnt[i][j] = 1; } } } cout << ans; ioi }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...