社区讨论
WA on #6 求调
P11232[CSP-S 2024] 超速检测参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m38cgrlw
- 此快照首次捕获于
- 2024/11/08 14:17 去年
- 此快照最后确认于
- 2025/11/04 15:08 4 个月前
RT
CPP#include<bits/stdc++.h>
using namespace std;
int T,n,m,l,v,ans1=0,ans2,wz[100005],qz[1000005];
bitset<1000005> jk;
struct hh{
int d,v,a,f;
}ca[100005];
struct wahh{
int l,r;
}qj[100005];
inline int xs(long double x){
return (int)x+1;
}
inline int xx(long double x){
if(x==(int)(x)){
return (int)(x)-1;
}
return (int)(x);
}
inline int cz(int x){
int l=1,r=m;
while(l<=r){
int mid=l+r>>1;
if(wz[mid]<x){
l=mid+1;
}else{
r=mid-1;
}
}
return l;
}
inline int cy(int x){
int l=1,r=m;
while(l<=r){
int mid=l+r>>1;
if(wz[mid]>x){
r=mid-1;
}else{
l=mid+1;
}
}
return r;
}
bool cmp(wahh x,wahh y){
return x.r<y.r;
}
int main(){
scanf("%d",&T);
while(T--){
memset(qz,0,sizeof(qz));
jk.reset();
ans1=0;
ans2=0;
scanf("%d%d%d%d",&n,&m,&l,&v);
for(int i=1;i<=n;++i){
scanf("%d%d%d",&ca[i].d,&ca[i].v,&ca[i].a);
ca[i].f=0;
}
for(int i=1,x;i<=m;++i){
scanf("%d",&wz[i]);
jk[wz[i]]=1;
}
for(int i=1;i<=l;++i){
qz[i]=qz[i-1]+jk[i];
}
for(int i=1;i<=n;++i){
if(ca[i].a==0){
if(ca[i].v>v&&qz[l]-qz[ca[i].d-1]>0){
ans1++;
ca[i].f=1;
qj[ans1]={cz(ca[i].d),cy(l)};
}
}else if(ca[i].a<0){
if(ca[i].v>v){
int js=ca[i].d*1.0+xx((long double)(v*v-ca[i].v*ca[i].v)/2.0/ca[i].a);
if(js>0&&qz[min(l,js)]-qz[ca[i].d-1]>0){
ca[i].f=1;
ans1++;
qj[ans1]={cz(ca[i].d),cy(min(l,js))};
}
}
}else{
if(ca[i].v>v&&qz[l]-qz[ca[i].d-1]>0){
ans1++;
ca[i].f=1;
qj[ans1]={cz(ca[i].d),cy(l)};
}else{
int ks=ca[i].d*1.0+xs((long double)(v*v-ca[i].v*ca[i].v)/2.0/ca[i].a);
if(ks<=l&&qz[l]-qz[max(ca[i].d,ks)]>0){
ca[i].f=1;
ans1++;
qj[ans1]={cz(max(ca[i].d,ks)+1),cy(l)};
}
}
}
}
int zr=-1;
sort(qj+1,qj+ans1+1,cmp);
for(int i=1;i<=ans1;i++){
if(zr<qj[i].l){
zr=qj[i].r;
ans2++;
}
}
printf("%d %d\n",ans1,m-ans2);
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...