QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#600606 | #9434. Italian Cuisine | zqx | WA | 0ms | 3668kb | C++23 | 2.6kb | 2024-09-29 17:38:26 | 2024-09-29 17:38:31 |
Judging History
answer
#include<bits/stdc++.h>
#define AC return 0;
#define int long long
#define pii pair<int,int>
#define all(tar) tar.begin(),tar.end()
const int N=2e5+5;
const int mod=998244353;
using namespace std;
const double pi=acos(-1),eps=1e-6;
int sgn(double x){//判断x的大小
if(fabs(x)<eps) return 0;
return x<0?-1:1;
}
struct point{
double x,y;
point(){}
point(double x,double y):x(x),y(y){}
point operator + (point b){return point(x+b.x,y+b.y);}
point operator - (point b){return point(x-b.x,y-b.y);}
bool operator == (point b){return sgn(x-b.x)==0&&sgn(y-b.y)==0;}
void out(){cout<<x<<" "<<y<<endl;}
}p[N];
typedef point Vector;
double dist(point a,point b){
double x=a.x-b.x,y=a.y-b.y;
return sqrt(x*x+y*y);
}
double dot(point a,point b){return a.x*b.x+a.y*b.y;}
double cross(point a,point b){return a.x*b.y-a.y*b.x;}
double area(point a,point b,point c){return abs(cross(b-a,c-a));}
struct line{
point a,b;
// lint(){}
line(point a,point b):a(a),b(b){}
line(point p,double angle){
a=p;
if(sgn(angle-pi/2==0)) b=(a+point(0,1));
else b=(a+point(1,tan(angle)));
}
};
typedef line segment;
double dis_point_line(point p,line v){
return fabs(cross(p-v.a,v.b-v.a))/dist(v.a,v.b);
}
struct circle{
point c;
double r;
circle(){}
circle(point c,double r):c(c),r(r){}
circle(double x,double y,double _r){c=point(x,y);r=_r;}
};
int line_circle_relation(line v,circle c){
double d=dis_point_line(c.c,v);
if(sgn(d-c.r)<0) return 0;//xiangjiao
if(sgn(d-c.r)==0) return 1;//xiangqie
return 2;
}
void solve(){
int n;cin>>n;
int x,y,r;cin>>x>>y>>r;circle c=circle(x,y,r);
for(int i=0;i<n;i++){
cin>>x>>y;
p[i]=point(x,y);
}
for(int i=0;i<n;i++) p[i+n]=p[i];
r=0;
int ans=0;
int res=0;
for(int i=0;i<n;i++){
Vector xian=c.c-p[i];
//cout<<r+1<<" "<<line_circle_relation(line(p[i],p[r+1]),c)<<'\n';
if(r<i) r=i;
while(r+1<2*n&&line_circle_relation(line(p[i],p[r+1]),c)!=0&&cross(p[r+1]-p[i],xian)>0){
r++;
//cout<<i<<" "<<r<<" "<<r-1<<" "<<i<<'\n';
if((r-1+n)%n!=i) ans+=area(p[r],p[r-1],p[i]);
//cout<<ans<<'\n';
}
res=max(res,ans);
if(ans>0) ans-=area(p[i],p[(i+1)%n],p[r%n]);
}
cout<<(int)res<<'\n';
}
/*
2
6 2
5 3 13 8 10 555
3 0
3 6 9
*/
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);cout.setf(ios::fixed);
int t;
cin>>t;
while(t--){
solve();
}
AC
}
詳細信息
Test #1:
score: 100
Accepted
time: 0ms
memory: 3608kb
input:
3 5 1 1 1 0 0 1 0 5 0 3 3 0 5 6 2 4 1 2 0 4 0 6 3 4 6 2 6 0 3 4 3 3 1 3 0 6 3 3 6 0 3
output:
5 24 0
result:
ok 3 number(s): "5 24 0"
Test #2:
score: -100
Wrong Answer
time: 0ms
memory: 3668kb
input:
1 6 0 0 499999993 197878055 -535013568 696616963 -535013568 696616963 40162440 696616963 499999993 -499999993 499999993 -499999993 -535013568
output:
286862654137719264
result:
wrong answer 1st numbers differ - expected: '0', found: '286862654137719264'