QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#115232 | #5904. Twirling Towards Freedom | zhouhuanyi | 49 ✓ | 616ms | 21272kb | C++11 | 2.4kb | 2023-06-25 11:27:06 | 2023-06-25 11:27:08 |
Judging History
answer
#include<iostream>
#include<cstdio>
#include<cmath>
#include<vector>
#include<algorithm>
#define N 5000
using namespace std;
int read()
{
char c=0;
int sum=0,f=1;
while (c!='-'&&(c<'0'||c>'9')) c=getchar();
if (c=='-') c=getchar(),f=-1;
while ('0'<=c&&c<='9') sum=sum*10+c-'0',c=getchar();
return sum*f;
}
struct points
{
long long x,y;
bool operator < (const points &t)const
{
return (x!=t.x)?x<t.x:y<t.y;
}
};
points st[N+1],dque[N+1];
vector<points>A;
vector<points>B;
vector<points>C;
vector<points>D;
vector<points>res;
int T,n,m,sm,top;
bool check(points a,points b,points c)
{
return (__int128)(b.y-a.y)*(c.x-a.x)<=(__int128)(c.y-a.y)*(b.x-a.x);
}
vector<points>operator + (vector<points>a,vector<points>b)
{
vector<points>c;
for (int i=0;i<a.size();++i)
for (int j=0;j<b.size();++j)
c.push_back((points){a[i].x+b[j].x,a[i].y+b[j].y});
return c;
}
vector<points>solve(vector<points>p)
{
vector<points>st;
sort(p.begin(),p.end()),top=0;
for (int i=0;i<p.size();++i)
{
while (top>=2&&check(dque[top-1],dque[top],p[i])) top--;
dque[++top]=p[i];
}
for (int i=1;i<=top;++i) st.push_back(dque[i]);
top=0;
for (int i=0;i<p.size();++i)
{
while (top>=2&&check(dque[top-1],p[i],dque[top])) top--;
dque[++top]=p[i];
}
for (int i=2;i<=top-1;++i) st.push_back(dque[i]);
return st;
}
int main()
{
int x,y;
double ans;
T=read();
for (int qt=1;qt<=T;++qt)
{
n=read(),m=read(),ans=0;
for (int i=1;i<=n;++i) x=read(),y=read(),st[i].x=x-y,st[i].y=x+y;
for (int w=0;w<=min(3,m);++w)
{
sm=m-w,A.clear(),B.clear(),C.clear(),D.clear();
for (int i=1;i<=n;++i)
{
A.push_back((points){st[i].x*((sm+3)>>2),st[i].y*((sm+3)>>2)});
B.push_back((points){st[i].y*((sm+2)>>2),-st[i].x*((sm+2)>>2)});
C.push_back((points){-st[i].x*((sm+1)>>2),-st[i].y*((sm+1)>>2)});
D.push_back((points){-st[i].y*(sm>>2),st[i].x*(sm>>2)});
}
A=solve(A),B=solve(B),C=solve(C),D=solve(D);
if (sm%4==0) res=solve(solve(solve(A+B)+C)+D);
else if (sm%4==1) res=solve(A+solve(solve(B+C)+D));
else if (sm%4==2) res=solve(solve(A+B)+solve(C+D));
else res=solve(solve(solve(A+B)+C)+D);
for (int i=0;i<res.size();++i) ans=max(ans,sqrt(1.0*res[i].x*res[i].x+1.0*res[i].y*res[i].y));
}
printf("Case #%d: %0.10lf\n",qt,ans);
}
return 0;
}
详细
Subtask #1:
score: 10
Accepted
Test #1:
score: 10
Accepted
time: 6ms
memory: 3732kb
input:
100 4 1 -2 4 1 -2 4 1 0 2 1 4 -5 0 2 5 -1 1 -2 2 10 8 -842 -60 148 -967 327 -600 -546 -346 -196 -267 -833 -156 334 -791 974 -382 -499 -785 519 -657 10 7 444 786 -313 649 -377 954 -872 316 505 714 678 170 40 -971 -290 -649 -824 -797 357 -653 10 9 -384 -28 267 -243 507 -628 -189 -656 373 -879 -115 -81...
output:
Case #1: 6.3245553203 Case #2: 10.0000000000 Case #3: 6.3245553203 Case #4: 8072.6630054772 Case #5: 9582.0846374889 Case #6: 9520.9500576361 Case #7: 3136.8787034248 Case #8: 9405.6161945935 Case #9: 9809.6108995209 Case #10: 8356.3092331483 Case #11: 8863.7475144546 Case #12: 10066.9729313235 Case...
result:
ok correct! (100 test cases)
Subtask #2:
score: 39
Accepted
Test #2:
score: 39
Accepted
time: 616ms
memory: 21272kb
input:
100 200 59153573 81 -81 -252 252 864 -864 -691 691 -599 599 -520 520 -835 835 334 -334 259 -259 -469 469 374 -374 -36 36 932 -932 -518 518 -882 882 -150 150 -392 392 29 -29 8 -8 -259 259 192 -192 -863 863 -88 88 -219 219 -118 118 485 -485 -953 953 -980 980 -14 14 433 -433 -672 672 352 -352 196 -196 ...
output:
Case #1: 82359120550.7561340332 Case #2: 84510626188.2999267578 Case #3: 70661053401.3009338379 Case #4: 109064878459.4080963135 Case #5: 31887461051.9420623779 Case #6: 44597031797.9429397583 Case #7: 16108038453.3387355804 Case #8: 88820696855.7596588135 Case #9: 38768573735.9652099609 Case #10: 2...
result:
ok correct! (100 test cases)
Extra Test:
score: 0
Extra Test Passed