求助,样例2和样例3过不去

P3829 [SHOI2012] 信用卡凸包

@[Stevehim](/user/759274) ``` printf("%.2Lf", ans); ``` printf真的可以这么用吗?qwq
by One_JuRuo @ 2023-09-14 20:07:38


@[One_JuRuo](/user/86507) 啊这个不是```long double```的吗awa,我在上面写了```#define double long double```的QAQ
by Stevehim @ 2023-09-14 20:15:15


@[Stevehim](/user/759274) 没用过QWQ
by One_JuRuo @ 2023-09-14 22:33:27


@[Stevehim](/user/759274) 试试删掉 ```ios::sync_with_stdio(false);```,因为这是兼容 ```cin``` ```cout``` 和 ```scanf``` ```printf```。加了这个就不能混用了
by One_JuRuo @ 2023-09-14 22:38:58


@[Stevehim](/user/759274) 我没用 ```long double```,思路还是和你一样,可能是有些细节不一样,这是我的代码,可以参考一下: ```cpp #include<bits/stdc++.h> using namespace std; struct node{double x,y;}p[100005],s[100005]; int n,cnt,top; double ch,k,r,l,phi,a,b,c; bool cmp(node a,node b){return (a.x!=b.x)?a.x<b.x:a.y<b.y;} double cross(node a,node b,node c){return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);} double dis(node a,node b){return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));} void add(double a,double b,double c) { double dx=cos(c+phi)*l,dy=sin(c+phi)*l; p[++cnt].x=a+dx,p[cnt].y=b+dy; p[++cnt].x=a-dx,p[cnt].y=b-dy; dx=cos(c-phi)*l,dy=sin(c-phi)*l; p[++cnt].x=a+dx,p[cnt].y=b+dy; p[++cnt].x=a-dx,p[cnt].y=b-dy; } void andrew() { sort(p+1,p+cnt+1,cmp); for(int i=1;i<=cnt;i++) { while(top>1&&cross(s[top-1],s[top],p[i])<=0)top--; s[++top]=p[i]; } int k=top; for(int i=cnt-1;i>=1;i--) { while(top>k&&cross(s[top-1],s[top],p[i])<=0)top--; s[++top]=p[i]; } double ans=0; for(int i=1;i<top;i++) ans+=dis(s[i],s[i+1]); ans+=dis(s[top],s[1]); printf("%.2f",ans+3.141592653589793*2*r); } int main() { cin>>n>>ch>>k>>r; ch-=2*r,k-=2*r,l=sqrt(ch*ch+k*k)/2,phi=atan(ch/k); for(int i=1;i<=n;i++) scanf("%lf%lf%lf",&a,&b,&c),add(a,b,c); andrew(); } ```
by One_JuRuo @ 2023-09-14 22:46:23


@[One_JuRuo](/user/86507) 感谢!发现问题了,我一开始的a和b没减去2rQAQ
by Stevehim @ 2023-09-15 07:10:27


@[Stevehim](/user/759274) QAQ
by One_JuRuo @ 2023-09-15 07:25:46


|