QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#536677#5809. Min Perimeterzhicheng0 6293ms14804kbC++141.2kb2024-08-29 15:36:492024-08-29 15:36:49

Judging History

你现在查看的是最新测评结果

  • [2024-08-29 15:36:49]
  • 评测
  • 测评结果:0
  • 用时:6293ms
  • 内存:14804kb
  • [2024-08-29 15:36:49]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
const int N=1000010;
struct s{
	int x,y;
	bool operator<(s b){
		return x<b.x;
	}
}p[N],x[N],y[N];
double dist(s a,s b){
	return sqrt(1ll*(a.x-b.x)*(a.x-b.x)+1ll*(a.y-b.y)*(a.y-b.y));
}
double solve(int l,int r){
	int mid=(l+r)>>1,cntx=0,cnty=0,posl=1,posr=1;
	double px=(p[mid].x+p[mid+1].x)/2.0,delta,ans;
	if(l==r){
		return 1e18;
	}
	ans=delta=min(solve(l,mid),solve(mid+1,r));
	for(int i=l;i<=mid;i++){
		if(px-p[i].x<=delta/2){
			x[++cntx]=p[i];
		}
	}
	for(int i=mid+1;i<=r;i++){
		if(p[i].x-px<=delta/2){
			y[++cnty]=p[i];
		}
	}
	sort(x+1,x+cntx+1,[](s a,s b){return a.y<b.y;});
	sort(y+1,y+cnty+1,[](s a,s b){return a.y<b.y;});
	for(int i=1;i<=cntx;i++){
		while(posl<=cnty&&x[i].y-y[posl].y>delta/2){
			posl++;
		}
		while(posr+1<=cnty&&y[posr+1].y-x[i].y<=delta/2){
			posr++;
		}
		for(int j=posl;j<=posr;j++){
			for(int k=j+1;k<=posr;k++){
				ans=min(ans,dist(x[i],y[j])+dist(x[i],y[k])+dist(y[j],y[k]));
			}
		}
	}
	return ans;
}
int main(){
	int t,n;
	scanf("%d",&t);
	for(int tt=1;tt<=t;tt++){
		scanf("%d",&n);
		for(int i=1;i<=n;i++){
			scanf("%d%d",&p[i].x,&p[i].y);
		}
		sort(p+1,p+n+1);
		printf("Case #%d: %.6lf\n",tt,solve(1,n));
	}
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 37ms
memory: 8032kb

input:

15
3
2 6
7 0
3 0
3
713 269
371 79
455 421
3
91983245 637281504
756917015 312173515
869576338 436726680
10000
14761642 78236002
9047458 47951098
5238002 27761162
476182 2523742
1428546 7571226
26190010 138805810
21904372 116092132
18094916 95902196
43332562 229660522
55237112 292754072
52380020 27761...

output:

Case #1: 1000000000000000000.000000
Case #2: 1000000000000000000.000000
Case #3: 1000000000000000000.000000
Case #4: 90912.296374
Case #5: 3.414214
Case #6: 27.922464
Case #7: 1701.012681
Case #8: 2865438.191994
Case #9: 2559567.076943
Case #10: 1792106.037292
Case #11: 2019352.542910
Case #12: 2530...

result:

wrong answer read 1000000000000000000.000000000000 but expected 17.893012206205 (test case 1)

Subtask #2:

score: 0
Wrong Answer

Test #2:

score: 0
Wrong Answer
time: 6293ms
memory: 14804kb

input:

15
3
501691275 344354353
167768963 536043860
249445040 557426549
4
1000000000 0
0 0
1000000000 1000000000
0 1000000000
1000000
138925776 669369648
61257680 295150640
170762328 822763944
55483472 267329456
97736936 470914328
84041848 404928904
18463588 88960924
124429360 599523280
95066048 458045504
...

output:

Case #1: 1000000000000000000.000000
Case #2: 3414213562.373095
Case #3: 866.071591
Case #4: 62459.895370
Case #5: 109784.246886
Case #6: 898200.317425
Case #7: 1707087.301874
Case #8: 1693.217785
Case #9: 1691.760202
Case #10: 6814.738992
Case #11: 1907363.271199
Case #12: 1798829.537861
Case #13: 2...

result:

wrong answer read 1000000000000000000.000000000000 but expected 799653579.133089780807 (test case 1)