社区讨论
民间数据生成代码
P11232[CSP-S 2024] 超速检测参与者 55已保存回复 66
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 34 条
- 当前快照
- 3 份
- 快照标识符
- @mify87v8
- 此快照首次捕获于
- 2025/11/26 19:56 3 个月前
- 此快照最后确认于
- 2025/11/26 20:06 3 个月前
欢迎 hack。
CPP#include<bits/stdc++.h>
using namespace std;
const int maxn=100007;
int T;
int d[maxn],v[maxn],a[maxn];
struct range{
int l,r;
}q[maxn];
bool com(const range &x,const range &y)
{
return x.r<y.r||x.l<y.l&&x.r==y.r;
}
int cnt;
int n,m;
int L,V;
int p[maxn];
int main()
{
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
scanf("%d%d",&L,&V);
for(int i=1;i<=n;i++)
scanf("%d%d%d",&d[i],&v[i],&a[i]);
for(int i=1;i<=m;i++)
scanf("%d",&p[i]);
cnt=0;
for(int i=1;i<=n;i++)
{
int idx=lower_bound(p+1,p+1+m,d[i])-p;
int ans=-1;
if(a[i]<=0)
{
int l=idx,r=m;
while(l<=r)
{
int mid=(l+r)>>1;
long long x=p[mid]-d[i];
if(1ll*v[i]*v[i]+2*a[i]*x>1ll*V*V)
l=mid+1,ans=mid;
else r=mid-1;
}
if(ans==-1) continue;
q[++cnt]=(range){idx,ans};
}
else
{
int l=idx,r=m;
while(l<=r)
{
int mid=(l+r)>>1;
long long x=p[mid]-d[i];
if(1ll*v[i]*v[i]+2*a[i]*x>1ll*V*V)
r=mid-1,ans=mid;
else l=mid+1;
}
if(ans==-1) continue;
q[++cnt]=(range){ans,m};
}
}
printf("%d ",cnt);
sort(q+1,q+1+cnt,com);
// for(int i=1;i<=cnt;i++) printf("\n%d %d\n",q[i].l,q[i].r);
int lst=0;
int res=0;
for(int i=1;i<=cnt;i++)
if(q[i].l>lst) lst=q[i].r,++res;
printf("%d\n",m-res);
}
return 0;
}
回复
共 66 条回复,欢迎继续交流。
正在加载回复...