QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#386243 | #5809. Min Perimeter | AFewSuns | 20 ✓ | 3974ms | 35156kb | C++17 | 2.4kb | 2024-04-11 14:26:52 | 2024-04-11 14:26:53 |
Judging History
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);
}
}
Details
Tip: Click on the bar to expand more detailed information
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