QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#729648#9576. Ordainer of Inexorable Judgmentucup-team4938#WA 0ms4008kbC++142.5kb2024-11-09 17:33:112024-11-09 17:33:18

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:33:18]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:4008kb
  • [2024-11-09 17:33:11]
  • 提交

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();
	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);
	}
	if(mx<=0)mx+=2*pi;
	if(mn<0)mn+=2*pi;
	// cout<<mx<<" "<<mn<<"\n";
	if(mx<mn)swap(mx,mn);
	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;
	}
	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();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3944kb

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: 3884kb

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: 4008kb

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: 3888kb

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: 3820kb

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'