样例3,4只有问题1错,5都有错。
每个错的都只差个位数。
我怀疑是car.in()的问题,考场+考完加起来块盯了4h了都没找出问题QAQ
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int len,max_v,n;
struct xx
{
char op;
int x,id;
void add(const int x,const int i)
{
xx::x=x;
id=i;
op=1;
}
void sub(const int x,const int i)
{
xx::x=x;
id=i;
op=0;
}
void check(const int x)
{
xx::x=x;
op=2;
}
}
b[N*3];
int all_b;
struct car
{
int d,v,a;
int l,r;
void in(const int i)
{
cin>>d>>v>>a;
if(a==0)
{
if(v>max_v) l=d,r=len;
else l=r=-1;
}
else if(a>0)
{
if(v>max_v) l=d,r=len;
else if(v*v+2ll*a*(len-d)<=max_v*max_v) l=r=-1;
else l=d+(max_v*max_v-v*v+2*a-1)/(2*a),r=len;
}
else
{
if(v<=max_v) l=r=-1;
else if(v*v+2ll*a*(len-d)>max_v*max_v) l=d,r=len;
else l=d,r=d+(max_v*max_v-v*v)/(2*a);
}
if(l>0)
{
b[++all_b].add(l,i);
b[++all_b].sub(r+1,i);
}
}
}
a[N];
set<int> all,call;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
//freopen("test.in","r",stdin);
//freopen("test.out","w",stdout);
int T,m,p,ans1,ans2;
bool cb;
cin>>T;
while(T--)
{
all_b=0,all.clear(),call.clear();
cin>>n>>m>>len>>max_v;
for(int i=1;i<=n;i++) a[i].in(i);
while(m--) cin>>p,b[++all_b].check(p);
sort(b+1,b+all_b+1,[&](const xx &a,const xx &b){return a.x==b.x?a.op<b.op:a.x<b.x;});
ans1=ans2=cb=0;
for(int i=1;i<=all_b;i++)
{
switch (b[i].op)
{
case 0:
all.erase(b[i].id);
if(call.find(b[i].id)!=call.end()) cb=0;
break;
case 1:
all.insert(b[i].id);
break;
case 2:
ans1+=all.size();
if(cb)
{
call.insert(all.begin(),all.end());
all.clear();
ans2++;
}
else
{
if(all.empty()) ans2++;
else cb=1,call=all,all.clear();
}
break;
}
}
cout<<ans1<<' '<<ans2<<'\n';
}
}