QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#386243#5809. Min PerimeterAFewSuns20 ✓3974ms35156kbC++172.4kb2024-04-11 14:26:522024-04-11 14:26:53

Judging History

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

  • [2024-04-11 14:26:53]
  • 评测
  • 测评结果:20
  • 用时:3974ms
  • 内存:35156kb
  • [2024-04-11 14:26:52]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
namespace my_std{
	#define ll long long
	#define bl bool
	ll my_pow(ll a,ll b,ll mod){
		ll res=1;
		if(!b) return 1;
		while(b){
			if(b&1) res=(res*a)%mod;
			a=(a*a)%mod;
			b>>=1;
		}
		return res;
	}
	ll qpow(ll a,ll b){
		ll res=1;
		if(!b) return 1;
		while(b){
			if(b&1) res*=a;
			a*=a;
			b>>=1;
		}
		return res;
	}
	#define db double
	#define pf printf
	#define pc putchar
	#define fr(i,x,y) for(register ll i=(x);i<=(y);i++)
	#define pfr(i,x,y) for(register ll i=(x);i>=(y);i--)
	#define go(u) for(ll i=head[u];i;i=e[i].nxt)
	#define enter pc('\n')
	#define space pc(' ')
	#define fir first
	#define sec second
	#define MP make_pair
	#define il inline
	#define inf 8e18
	#define random(x) rand()*rand()%(x)
	#define inv(a,mod) my_pow((a),(mod-2),(mod))
	il ll read(){
		ll sum=0,f=1;
		char ch=0;
		while(!isdigit(ch)){
			if(ch=='-') f=-1;
			ch=getchar();
		}
		while(isdigit(ch)){
			sum=sum*10+(ch^48);
			ch=getchar();
		}
		return sum*f;
	}
	il void write(ll x){
		if(x<0){
			x=-x;
			pc('-');
		}
		if(x>9) write(x/10);
		pc(x%10+'0');
	}
	il void writeln(ll x){
		write(x);
		enter;
	}
	il void writesp(ll x){
		write(x);
		space;
	}
}
using namespace my_std;
ll t,n;
db ans=inf;
struct node{
	ll x,y;
}a[1000010],b[1000010];
il bl cmp(node x,node y){
	return x.x<y.x;
}
il db dis(node x,node y){
	return sqrt(1.0*(x.x-y.x)*(x.x-y.x)+1.0*(x.y-y.y)*(x.y-y.y));
}
void solve(ll l,ll r){
	if(l==r) return;
	ll mid=(l+r)>>1,lim=a[mid].x;
	solve(l,mid);
	solve(mid+1,r);
	ll pos1=l,pos2=mid+1,pos=l;
	while(pos1<=mid&&pos2<=r){
		if(a[pos1].y<=a[pos2].y) b[pos]=a[pos1++];
		else b[pos]=a[pos2++];
		pos++;
	}
	fr(i,pos1,mid) b[pos++]=a[i];
	fr(i,pos2,r) b[pos++]=a[i];
	fr(i,l,r) a[i]=b[i];
	pos=0;
	fr(i,l,r) if(2.0*abs(a[i].x-lim)<=ans) b[++pos]=a[i];
	fr(i,1,pos-2){
		fr(j,i+1,pos-1){
			if(2.0*(b[j].y-b[i].y)>ans) break;
			fr(k,j+1,pos){
				if(2.0*(b[k].y-b[i].y)>ans) break;
				ans=min(ans,dis(b[i],b[j])+dis(b[j],b[k])+dis(b[k],b[i]));
			}
		}
	}
}
int main(){
//	freopen("triangle.in","r",stdin);
//	freopen("triangle.out","w",stdout);
	t=read();
	fr(_,1,t){
		ans=inf;
		n=read();
		fr(i,1,n){
			a[i].x=read();
			a[i].y=read();
		}
		sort(a+1,a+n+1,cmp);
		solve(1,n);
		pf("Case #%lld: %.6lf\n",_,ans);
	}
}

詳細信息

Subtask #1:

score: 5
Accepted

Test #1:

score: 5
Accepted
time: 26ms
memory: 6020kb

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: 17.893012
Case #2: 1042.844835
Case #3: 1711142102.791327
Case #4: 90912.296374
Case #5: 3.414214
Case #6: 26.153830
Case #7: 1701.012681
Case #8: 2865438.191994
Case #9: 2020088.337226
Case #10: 1792106.037292
Case #11: 2019352.542910
Case #12: 2530195.728018
Case #13: 930517.779631
Case #...

result:

ok correct! (15 test cases)

Subtask #2:

score: 15
Accepted

Test #2:

score: 15
Accepted
time: 3974ms
memory: 35156kb

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: 799653579.133090
Case #2: 3414213562.373095
Case #3: 866.071591
Case #4: 62459.895370
Case #5: 59141.918359
Case #6: 898195.090968
Case #7: 1707085.769987
Case #8: 1686.226798
Case #9: 1686.603546
Case #10: 6806.665584
Case #11: 1907363.078325
Case #12: 1798829.537861
Case #13: 2000000.4819...

result:

ok correct! (15 test cases)

Extra Test:

score: 0
Extra Test Passed