Submission #1308952

#TimeUsernameProblemLanguageResultExecution timeMemory
1308952WH8Coin Collecting (JOI19_ho_t4)C++20
0 / 100
1 ms640 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pll pair<int, int> #define mp make_pair #define pb push_back #define f first #define s second #define endl '\n' #define ld long double #define sz(x) static_cast<int>((x).size()) #define i5 tuple<int,int,int,int,int> #define all(x) x.begin(), x.end() #define iii tuple<int,int,int> signed main(){ int n;cin>>n; vector<pll> v(2*n); for(int i=0;i<2*n;i++){ cin>>v[i].f>>v[i].s; } sort(all(v)); int ini=0; vector<vector<int>> a(3, vector<int>(n+1, 0)); for(int i=0;i<2*n;i++){ int y=(v[i].s >= 2 ? 2 : 1), x=(v[i].f >= 1 and v[i].f <= n ? v[i].f : (v[i].f < 1 ? 1 : n)); ini += abs(v[i].s - y) + abs(v[i].f - x); a[y][x]++; } vector<queue<int>> lol(3); for(int i=2;i>=1;i--){ for(int j=1;j<=n;j++){ for(int k=0;k<a[i][j];k++){ lol[i].push(j); } //cout<<a[i][j]<<" "; } //cout<<endl; } int cont=0; auto take1=[&](int x, int y){ cont += abs(y-1)+abs(x-lol[1].front()); lol[1].pop(); }; auto take2=[&](int x, int y){ cont += abs(y-2)+abs(x-lol[2].front()); lol[2].pop(); }; for(int x=1;x<=n;x++){ for(int y=2;y>=1;y--){ if(lol[1].empty() or lol[2].empty()){ if (lol[1].empty()) take2(x, y); else take1(x, y); } else { if(y==1){ if(lol[1].front() - 1 <= lol[2].front()) take1(x, y); else take2(x, y); } if(y==2){ if(lol[2].front() - 1 <= lol[1].front()) take2(x, y); else take1(x, y); } } } } //printf("ini is %lld, cont is %lld\n", ini, cont); cout<<ini+cont; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...