Submission #32180

#TimeUsernameProblemLanguageResultExecution timeMemory
32180minchurlPalembang Bridges (APIO15_bridge)C++11
31 / 100
2000 ms3460 KiB
#include<stdio.h>
#include<math.h>
#include<algorithm>
#define MAX_N 100005
#define abs(x) ((x)>0?(x):(-(x)))
#define LL long long
using namespace std;
struct emp{
	int x,y;
};
emp arr[MAX_N];
LL N,K;
LL only_arr[2*MAX_N],ans;
LL input(){
	LL i,n,S,T,sum=0;
	char P[2],Q[2];
	n=0;
	for(i=0;i<N;i++){
		scanf("%s %lld %s %lld",P,&S,Q,&T);
		if(P[0]==Q[0]){
			sum+=abs(S-T);
		}else{
			only_arr[2*n+1]=S;only_arr[2*n+2]=T;
			arr[++n].x=S;arr[n].y=T;
			sum++;
		}
	}
	N=n;
	return sum;
}
LL bridge_only(){
	LL i,x,sum=0;
	sort(only_arr+1,only_arr+2*N+1);
	x=N;
	for(i=1;i<=2*N;i++)	sum+=abs(only_arr[i]-only_arr[x]);
	return sum;
}
LL cost(LL x,LL y,LL P,LL Q){
	LL i,p,q,sum=0;
	for(i=1;i<=N;i++){
		if(i==x || i==y)	continue;
		p=abs(P-arr[i].x)+abs(P-arr[i].y);
		q=abs(Q-arr[i].x)+abs(Q-arr[i].y);
		p=p<q?p:q;
		sum+=p;
	}
	return sum;
}
LL proper(LL x,LL y){
	LL p,q,r,s;
	p=cost(x,y,arr[x].x,arr[y].x);
	q=cost(x,y,arr[x].x,arr[y].y);
	r=cost(x,y,arr[x].y,arr[y].x);
	s=cost(x,y,arr[x].y,arr[y].y);
	p=p<q?p:q;
	r=r<s?r:s;
	p=p<r?p:r;
	return abs(arr[x].x-arr[x].y)+abs(arr[y].x-arr[y].y)+p;
}
int main(){
	LL base;
	scanf("%lld %lld",&K,&N);
	base=input();
	ans=bridge_only()+base;
	if(K==1){
		printf("%lld\n",ans);
		return 0;
	}
	//O(N^3)
	LL i,j,k,x;
	for(i=1;i<=N;i++){
		for(j=i+1;j<=N;j++){
			x=proper(i,j)+base;
			ans=ans<x?ans:x;
		}
	}
	printf("%lld\n",ans);
	return 0;
}

Compilation message (stderr)

bridge.cpp: In function 'int main()':
bridge.cpp:70:9: warning: unused variable 'k' [-Wunused-variable]
  LL i,j,k,x;
         ^
bridge.cpp: In function 'long long int input()':
bridge.cpp:19:37: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%s %lld %s %lld",P,&S,Q,&T);
                                     ^
bridge.cpp: In function 'int main()':
bridge.cpp:62:26: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%lld %lld",&K,&N);
                          ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...