Submission #228312

#TimeUsernameProblemLanguageResultExecution timeMemory
228312kshitij_sodaniCoin Collecting (JOI19_ho_t4)C++17
37 / 100
74 ms17792 KiB
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef int64_t llo;
#define mp make_pair
#define pb push_back
#define a first
#define b second
llo it[100001][2];

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	llo n;
	cin>>n;
	memset(it,0,sizeof(it));
	vector<pair<llo,llo>> ac;
	llo aa,bb;
	llo ans=0;
	for(llo i=0;i<2*n;i++){
		cin>>aa>>bb;
		if(bb<=1){
			if(aa<1){
				it[0][0]+=1;
				ac.pb({0,0});
			}
			else if(aa>n){
				it[n-1][0]+=1;
				ac.pb({n-1,0});
			}
			else{
				it[aa-1][0]+=1;
				ac.pb({aa-1,0});
			}
		}
		else{
			if(aa<1){
				it[0][1]+=1;
				ac.pb({0,1});
			}
			else if(aa>n){
				it[n-1][1]+=1;
				ac.pb({n-1,1});
			}
			else{
				it[aa-1][1]+=1;
				ac.pb({aa-1,1});
			}
		}
		ans+=abs(aa-(ac[i].a+1))+abs(bb-(ac[i].b+1));
	//	cout<<ans<<endl;
	//	cout<<ac[ac.size()-1].a<<","<<ac[ac.size()-1].b<<endl;
	}
	//cout<<ans<<endl;
	sort(ac.begin(),ac.end());
	llo dp[2*n][n+1];
	for(llo i=0;i<2*n;i++){
		for(llo j=0;j<=n;j++){
			dp[i][j]=2*n*n;
		}
	}
	for(llo i=0;i<2*n;i++){
	//	cout<<ac[i].a<<":"<<ac[i].b<<endl;

		llo co=0;
		if(ac[i].b==1){
			co=1;
		}
		if(i==0){
			dp[0][0]=abs(ac[i].a)+1-co;
			dp[0][1]=abs(ac[i].a)+co;
		}
		else{
			if(i<n){
				dp[i][0]=dp[i-1][0]+abs(i-ac[i].a)+1-co;
			//	cout<<dp[i-1][0]<<i<<" "<<ac[i].a<<" "<<co<<endl;
			}
			for(llo j=1;j<=min(i+1,n);j++){
				if((i-j)>=0 and (i-j)<n){
					dp[i][j]=min(dp[i][j],dp[i-1][j]+abs((i-j)-ac[i].a)+1-co);
				}
				//if(j<n){
					dp[i][j]=min(dp[i][j],dp[i-1][j-1]+abs((j-1)-ac[i].a)+co);
				//}
			}
		}
	/*	for(llo j=0;j<=n;j++){
			cout<<dp[i][j]<<" ";
		}
		cout<<endl;*/
	}
	ans+=dp[2*n-1][n];
	cout<<ans<<endl;
	
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...