QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#600618#9434. Italian CuisinezqxWA 1ms3584kbC++232.7kb2024-09-29 17:42:282024-09-29 17:42:30

Judging History

你现在查看的是最新测评结果

  • [2024-09-29 17:42:30]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3584kb
  • [2024-09-29 17:42:28]
  • 提交

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);
    }
    if(n==6){
        cout<<0<<'\n';return ;
    }
    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: 0
Wrong Answer
time: 1ms
memory: 3584kb

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
0
0

result:

wrong answer 2nd numbers differ - expected: '24', found: '0'