社区讨论
WA80分 #3#4错误求调
P11232[CSP-S 2024] 超速检测参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m373vu3u
- 此快照首次捕获于
- 2024/11/07 17:29 去年
- 此快照最后确认于
- 2024/11/07 17:51 去年
CPP
#include<bits/stdc++.h>
using namespace std;
int t;
int n,m,L,V;
struct car{
int d,v,a;
double st,ed;
}c[100005];
struct sb{
double s,e,nu;
friend bool operator <(sb ala,sb alb){
return ala.e<alb.e;
}
}d[100005];
int p[100005];
int ans=0;
int cnt=0;
int tmp;
int main(){
//freopen("detect.in","r",stdin);
//freopen("detect.out","w",stdout);
scanf("%d",&t);
while(t--){
memset(c,0,sizeof(c));
memset(p,0,sizeof(p));
memset(d,0,sizeof(d));
ans=0;
cnt=0;
scanf("%d %d %d %d",&n,&m,&L,&V);
for(int i=1;i<=n;i++){
scanf("%d %d %d",&c[i].d,&c[i].v,&c[i].a);
if(c[i].a<=0&&c[i].v<=V){
i--;
n--;
}
}
for(int i=1;i<=m;i++){
scanf("%d",&p[i]);
}
for(int i=1;i<=n;i++){
if(c[i].a==0){
c[i].st=c[i].d;
c[i].ed=L+1;
}else{
if(c[i].v>V){
if(c[i].a>0){
c[i].st=c[i].d-0.001;
c[i].ed=L+1;
continue;
}
double p=(V*V-c[i].v*c[i].v)*1.0/(2*c[i].a)+c[i].d;
if(p>L+1){
c[i].st=c[i].d-0.001;
c[i].ed=L+1;
continue;
}
c[i].st=c[i].d-0.001;
c[i].ed=p;
}
if(c[i].v<=V){
double p=(V*V-c[i].v*c[i].v)*1.0/(2*c[i].a)+c[i].d;
if(p>L+1){
c[i].st=L+1;
c[i].ed=L+1;
continue;
}
c[i].st=p;
c[i].ed=L+1;
}
}
}
sort(p+1,p+m+1);
for(int i=1;i<=n;i++)
{
int l=1,r=m;
int mid=0;
bool flag=0;
while(r>=l){
mid=(l+r)/2;
if(p[mid]>=c[i].ed){
r=mid-1;
}else if(p[mid]<=c[i].st){
l=mid+1;
}else{
flag=1;
//cout<<i<<" ";
break;
}
}
if(flag){
d[++cnt].s=c[i].st;
d[cnt].e=c[i].ed;
}
}
/*tmp=0;
for(int i=1;i<=cnt;i++){
if(d[i].e>L)tmp++;
}
if(cnt==0){
cout<<cnt<<" "<<m<<"\n";
continue;
}
if(tmp==cnt){
cout<<cnt<<" "<<m-1<<"\n";
continue;
}*/
n=cnt;
int pans=0;
sort(d+1,d+n+1);
for(int i=1;i<=n;i++){
if(p[pans]>=d[i].s){
continue;
}else{
ans++;
int l=1,r=m;
while(r>=l){
int mid=(l+r)/2;
if(p[mid]<d[i].e){
l=mid+1;
pans=mid;
}else{
r=mid-1;
}
}
}
}
printf("%d %d\n",cnt,m-ans);
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...