제출 #1277780

#제출 시각아이디문제언어결과실행 시간메모리
1277780PieArmyCoin Collecting (JOI19_ho_t4)C++20
100 / 100
32 ms2088 KiB
#include<bits/stdc++.h> typedef long long ll; #define pb push_back #define fr first #define sc second #define endl '\n' using namespace std; int n; int arr[100023][2]; ll ans=0; const bool boceksizlestir=false; int main(){ ios_base::sync_with_stdio(23^23);cin.tie(NULL); cin>>n; for(int i=1;i<=2*n;i++){ pair<int,int>p;cin>>p.fr>>p.sc; if(p.fr<1){ ans+=1-p.fr; p.fr=1; } if(p.fr>n){ ans+=p.fr-n; p.fr=n; } if(p.sc<1){ ans+=1-p.sc; p.sc=1; } if(p.sc>2){ ans+=p.sc-2; p.sc=2; } arr[p.fr][p.sc-1]++; } vector<int>need[2]; for(int i=1;i<=n;i++){ if(arr[i][0]+arr[i][1]<2){ if(!arr[i][0]){ need[0].pb(i); } if(!arr[i][1]){ need[1].pb(i); } } else{ while(arr[i][0]>1&&need[0].size()){ ans+=i-need[0].back(); arr[need[0].back()][0]++; need[0].pop_back(); arr[i][0]--; } while(arr[i][1]>1&&need[1].size()){ ans+=i-need[1].back(); arr[need[1].back()][1]++; need[1].pop_back(); arr[i][1]--; } while(arr[i][0]>1&&need[1].size()){ ans+=i-need[1].back()+1; arr[need[1].back()][1]++; need[1].pop_back(); arr[i][0]--; } while(arr[i][1]>1&&need[0].size()){ ans+=i-need[0].back()+1; arr[need[0].back()][0]++; need[0].pop_back(); arr[i][1]--; } if(arr[i][0]==0&&arr[i][1]>1){ ans++; arr[i][1]--; arr[i][0]++; } else if(arr[i][1]==0&&arr[i][0]>1){ ans++; arr[i][0]--; arr[i][1]++; } int x=max(0,arr[i][0]-1); ans+=x; arr[i+1][0]+=x; arr[i][0]-=x; x=max(0,arr[i][1]-1); ans+=x; arr[i+1][1]+=x; arr[i][1]-=x; if(!arr[i][0]){ need[0].pb(i); } if(!arr[i][1]){ need[1].pb(i); } } if(boceksizlestir){ cout<<ans<<endl; for(int i=0;i<2;i++){ for(int j=1;j<=n;j++){ cout<<arr[j][i]<<" "; } cout<<endl; } cout<<endl; } } cout<<ans<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...