社区讨论
样例没过求调
P11232[CSP-S 2024] 超速检测参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhizrjzs
- 此快照首次捕获于
- 2025/11/03 18:22 4 个月前
- 此快照最后确认于
- 2025/11/03 18:22 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
// #define fileio
#define IOS
void ___()
{
#ifdef fileio
freopen("detect.in","r",stdin);
freopen("detect.out","w",stdout);
#endif
#ifdef IOS
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define endl '\n'
#endif
}
#define ll long long
const int _mxn=1e5+5,_mxl=1e6+5;
int n,m;
ll L,V;
struct car
{
ll d;//start
ll v0,a;
ll l,r;//超速区间
bool f;//chaosu?
car(){}
car(ll _d,ll _v0,ll _a):d(_d),v0(_v0),a(_a)
{
if(a!=0)
{
if(a>0)
{
if(v0>V)
l=d,r=L,f=true;
else
l=min(d+(int)floor(1.0*(V*V-v0*v0+2*a)/(2*a)),L+1),r=L,f=(l!=L+1);
}
else
{
if(v0<=V)
f=false;
else
l=d,r=min(d+(int)ceil(1.0*(V*V-v0*v0-2*a)/(2*a)),L),f=true;
}
}
else
{
if(v0>V)
l=d,r=L,f=true;
else
l=L+1,r=d-1,f=false;
}
}
bool operator<(car _x) const
{
if(r==_x.r)
return l<_x.l;
return r>_x.r;
}
}c[_mxn];
int p[_mxn];
namespace BIT
{
int tr[_mxl];
inline int lowbit(int x){return x&-x;}
void add(int x,int k)
{
for(int i=x;i<_mxl;i+=lowbit(i))
tr[i]+=k;
}
int query(int l,int r)
{
if(l>r)
return 0;
int res=0;
for(int i=r;i>0;i-=lowbit(i))
res+=tr[i];
for(int i=l-1;i>0;i-=lowbit(i))
res-=tr[i];
return res;
}
void clear()
{
memset(tr,0,sizeof(tr));
}
}
int ans1,ans2;
int main()
{
___();
int _;
cin>>_;
while(_--)
{
cin>>n>>m>>L>>V;
for(int i=1;i<=n;i++)
{
ll d;
ll v0,a;
cin>>d>>v0>>a;
c[i]=car(d,v0,a);
}
BIT::clear();
for(int i=1;i<=m;i++)
cin>>p[i],BIT::add(p[i],1);
ans1=0;
vector<car> q;
for(int i=1;i<=n;i++)
{
if(c[i].f)
q.push_back(c[i]),ans1+=(BIT::query(c[i].l,c[i].r)>0);
}
cout<<ans1<<" ";
sort(q.begin(),q.end());
ll lst=-1;
ans2=m;
for(car it:q)
{
if(lst<it.l)
lst=it.r,ans2--;
}
cout<<ans2<<endl;
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...