QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#729721 | #9576. Ordainer of Inexorable Judgment | ucup-team4938# | WA | 0ms | 4008kb | C++14 | 2.6kb | 2024-11-09 17:41:15 | 2024-11-09 17:41:16 |
Judging History
你现在查看的是最新测评结果
- [2024-12-23 14:23:26]
- hack成功,自动添加数据
- (/hack/1303)
- [2024-12-06 11:32:56]
- hack成功,自动添加数据
- (/hack/1271)
- [2024-11-14 21:58:28]
- hack成功,自动添加数据
- (/hack/1181)
- [2024-11-09 17:41:15]
- 提交
answer
#include<bits/stdc++.h>
#define int long long
#define mod 998244353ll
#define pii pair<db,db>
#define fi first
#define se second
#define mems(x,y) memset(x,y,sizeof(x))
#define pb push_back
#define db long double
using namespace std;
const int maxn=200010;
const int inf=1e18;
const db pi=acos(-1);
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch-48);ch=getchar();}
return x*f;
}
bool Mbe;
int n;
db x,y,d,t,ans;
pii a[maxn];
db get(db a,db b){
db v=asin(b/sqrt(a*a+b*b));
if(a<0&&v>0)return v+pi/2.0;
if(a<0&&v<0)return v-pi/2.0;
return v;
}
void work(){
n=read();x=read(),y=read(),d=read(),t=read();db tt=t;
for(int i=1;i<=n;i++)a[i]={read(),read()};a[n+1]=a[1];
for(int i=1;i<=n;i++){
if(d*d>=a[i].fi*a[i].fi+a[i].se*a[i].se){
printf("%.10Lf\n",t);
return ;
}
}
for(int i=1;i<=n;i++){
db x=a[i].fi,y=a[i].se,xx=a[i+1].fi,yy=a[i+1].se;
db aa=yy-y,bb=x-xx,cc=-x*yy+xx*y;
// cout<<(aa*x+bb*y+cc==0)<<" "<<(aa*xx+bb*yy+cc==0)<<"\n";
db dd=abs(cc)/sqrt(aa*aa+bb*bb);
if(d>=dd){
printf("%.10Lf\n",t);
return ;
}
}
bool fl1=0,fl2=0;
for(int i=1;i<=n;i++){
db x=a[i].fi,y=a[i].se,xx=a[i+1].fi,yy=a[i+1].se;
if(x==xx){
if(x>=0)fl1=1;
if(x<=0)fl2=1;
}
else if(y==yy)continue;
else{
db k=(y-yy)/(x-xx),b=y-x*k;
if((-b/k)>=0)fl1=1;
if((-b/k)<=0)fl2=1;
// cout<<k<<" "<<b<<" "<<(-b/k)<<"\n";
}
// cout<<i<<" "<<x<<" "<<y<<" "<<xx<<" "<<yy<<" "<<fl1<<" "<<fl2<<"\n";
}
if(fl1&&fl2){
printf("%.10Lf\n",t);
return ;
}
if(!fl1){
x=-x;y=-y;
for(int i=1;i<=n;i++)a[i].fi=-a[i].fi;
for(int i=1;i<=n;i++)a[i].se=-a[i].se;
}
db mn=2*pi,mx=-2*pi;
for(int i=1;i<=n;i++){
db v=get(a[i].fi,a[i].se);
db dd=sqrt(a[i].fi*a[i].fi+a[i].se*a[i].se);
db vv=asin(d/dd);
// cout<<i<<" "<<a[i].fi<<" "<<a[i].se<<" "<<v/pi*180<<"\n";
mx=max(mx,v+vv);
mn=min(mn,v-vv);
}
bool fl=0;
if(mx<=0){
mx+=2*pi;
mn+=2*pi;
swap(mx,mn);
}
else if(mn<0){
mn+=2*pi;
swap(mn,mx);
fl=1;
}
// cout<<mx<<" "<<mn<<"\n";
db v=get(x,y);
// cout<<v<<"\n";
while(t>=2*pi)ans+=mx-mn,t-=2*pi;
if(v<mn){
db d=min(mn-v,t);
t-=d;v+=d;
}
if(v<mx){
db d=min(mx-v,t);
t-=d,v+=d,ans+=d;
}
// cout<<ans<<" "<<tt-ans<<"\n";
if(fl)ans=tt-ans;
printf("%.10Lf\n",ans);
}
// \
444
bool Med;
int T;
signed main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
// ios::sync_with_stdio(0);
// cin.tie(0);cout.tie(0);
// cerr<<(&Mbe-&Med)/1048576.0<<" MB\n";
T=1;
while(T--)work();
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 4008kb
input:
3 1 0 1 1 1 2 2 1 2 2
output:
1.0000000000
result:
ok found '1.0000000', expected '1.0000000', error '0.0000000'
Test #2:
score: 0
Accepted
time: 0ms
memory: 3888kb
input:
3 1 0 1 2 1 2 2 1 2 2
output:
1.5707963268
result:
ok found '1.5707963', expected '1.5707963', error '0.0000000'
Test #3:
score: 0
Accepted
time: 0ms
memory: 3844kb
input:
3 1 0 1 10000 1 2 2 1 2 2
output:
2500.7077522575
result:
ok found '2500.7077523', expected '2500.7077523', error '0.0000000'
Test #4:
score: 0
Accepted
time: 0ms
memory: 3952kb
input:
3 10000 10000 1 10000 10000 9999 10000 10000 9999 10000
output:
0.3842413003
result:
ok found '0.3842413', expected '0.3842413', error '0.0000000'
Test #5:
score: -100
Wrong Answer
time: 0ms
memory: 3944kb
input:
3 -10000 -10000 10000 10000 -10000 -9999 -10000 -10000 -9999 -10000
output:
10000.0000000000
result:
wrong answer 1st numbers differ - expected: '2500.2406700', found: '10000.0000000', error = '2.9996150'