QOJ.ac
QOJ
ID | Submission ID | Problem | Hacker | Owner | Result | Submit time | Judge time |
---|---|---|---|---|---|---|---|
#1271 | #800469 | #9576. Ordainer of Inexorable Judgment | quailty | Hanoist | Success! | 2024-12-06 11:32:44 | 2024-12-06 11:32:45 |
Details
Extra Test:
Wrong Answer
time: 0ms
memory: 2104kb
input:
3 -10000 1 500 6 -501 -1 -501 -10000 -500 -10000
output:
3.076372258785
result:
wrong answer 1st numbers differ - expected: '2.7931870', found: '3.0763723', error = '0.1013843'
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#800469 | #9576. Ordainer of Inexorable Judgment | Hanoist | WA | 0ms | 2108kb | C++14 | 2.0kb | 2024-12-06 11:24:03 | 2024-12-06 11:40:37 |
answer
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<functional>
#include<utility>
#include<cassert>
using namespace std;
const int N = 111;
#define pi acos(-1)
#define double long double
int n;
struct vec{
double x,y;
}a[N],sl[N << 1];
double sx,sy,d,t;
inline double Dis(vec a,vec b){
return 1.0 * sqrt((a.y - b.y) * (a.y - b.y) + (a.x - b.x) * (a.x - b.x));
}
inline vec rotate(vec a,double ang){
return (vec){a.x * cos(ang) - a.y * sin(ang),a.x * sin(ang) + a.y * cos(ang)};
}
bool cmp(vec u,vec v){
if(u.x != v.x) return u.x < v.x;
return u.y < v.y;
}
int main(){
int i,j,k,x,y;
vec O = {0,0};
scanf("%d %Lf %Lf %Lf %Lf",&n,&sx,&sy,&d,&t);
for(i = 1;i <= n;i++){
scanf("%Lf %Lf",&a[i].x,&a[i].y);
}
for(i = 1;i <= n;i++){
double p = atan2(a[i].y,a[i].x);
double q = abs(acos(d / Dis(a[i],O)));
sl[i].x = p + q - pi / 2,sl[i].y = p - q + pi / 2;
//printf("%Lf %Lf\n",sl[i].x,sl[i].y);
//if(sl[i].x > sl[i].y) sl[i].x -= 2 * pi;
}
sort(sl + 1,sl + n + 1,cmp);
for(i = 1;i <= n;i++) sl[i + n] = {sl[i].x + 2 * pi,sl[i].y + 2 * pi};
double res1,res,mx,my;
for(i = 1;i <= n;i++){
mx = 1e18,my = -1e18;
for(j = i;j < n + i;j++){
mx = min(sl[j].x,mx);
my = max(sl[j].y,my);
}
if(my - mx <= pi){
res1 = my - mx;
k = i;
break;
}
}
res = (int)(t / 2 / pi) * res1;
t -= 2 * pi * (int)(t / 2 / pi);
double st = atan2(sy,sx);
//printf("%Lf %d %Lf %Lf\n",st,k,mx,my);
if(my - st > 2 * pi) st += 2 * pi;
if(st < mx) res += min(res1,max((double)0.0,t - (mx - st)));
else if(st <= my) res += min(my - st + max((double)0.0,t - (mx + 2 * pi - st)),t);
else res += min(res1,max((double)0.0,t - (mx + 2 * pi - st)));
printf("%.12Lf\n",res);
return 0;
}