考试的时候敲了1小时的代码就给我了90分,就只能遗憾拿到210分无缘1=了,复原的代码在luogu官方数据上第三个点WA了,求大佬调调:```cpp #include<bits/stdc++.h> using namespace std; int t; const int N=1e5+10; struct Node{ double d,v,a; }x[N],y[N]; struct Node2{ double left,right; }g[N]; double p[N]; double ddd[N]; double dd,vv,aa; int n,m,ans1,ans2=1; double L,V; int search1(int l,int r,double x){ while(l<r){ int mid=(l+r)/2; if(p[mid]<x){ l=mid+1; } else{ r=mid; } } return l; } int search2(int l,int r,double x){ while(l<r){ int mid=(l+r+1)/2; if(p[mid]<=x){ l=mid; } else{ r=mid-1; } } return l; } bool cmp(Node2 xx,Node2 yy){ return xx.right<yy.right; } int main(){ // freopen("detect.in","r",stdin); // freopen("detect.out","w",stdout); scanf("%d",&t); while(t--){ scanf("%d%d%lf%lf",&n,&m,&L,&V); int j=0,k=0,ll=0,o=0; for(int i=1;i<=n;i++){ scanf("%lf%lf%lf",&dd,&vv,&aa); if(aa<0){ y[++k].a=abs(aa); y[k].d=dd; y[k].v=vv; } else if(aa>0){ x[++j].a=aa; x[j].d=dd; x[j].v=vv; } else{ if(vv>V){ ddd[++ll]=dd; } } } for(int i=1;i<=m;i++){ scanf("%lf",&p[i]); } sort(p+1,p+1+m); for(int i=1;i<=ll;i++){ if(ddd[i]<=p[m]){ ans1++; g[++o].left=p[search1(1,m,ddd[i])]; g[o].right=p[m]; } } for(int i=1;i<=j;i++){ if(p[m]<x[i].d){ continue; } double ti=(0.0+V-x[i].v)1.0/(1.0x[i].a); double si=x[i].vti+0.5titi1.0x[i].a; if(si+x[i].d>=p[m]){ continue; } else{ ans1++; } int l=search1(1,m,si+x[i].d); if(p[l]==si+x[i].d){ l++; } g[++o].left=p[l]; g[o].right=p[m]; } for(int i=1;i<=k;i++){ if(p[m]<y[i].d){ continue; } if(V>y[i].v){ continue; } double ti=(0.0+y[i].v-V)1.0/(1.0y[i].a); double si=y[i].vti-0.5titi1.0y[i].a; double r=y[i].d+si; double l=y[i].d; if(r<=p[search1(1,m,y[i].d)]||r<l){ continue; } else{ ans1++; } int rr=search2(1,m,y[i].d+si); if(p[rr]==y[i].d+si){ rr--; } g[++o].left=p[search1(1,m,y[i].d)]; g[o].right=p[rr]; } sort(g+1,g+1+o,cmp); int now=1; for(int i=2;i<=o;i++){ if(g[i].left>g[now].right){ now=i; ans2++; } } printf("%d %d\n",ans1,m-ans2); ans1=0; ans2=1; } return 0; }
有点长,烦大佬细看