80pts 求助
查看原帖
80pts 求助
735763
_ChongYun_楼主2024/11/7 21:59

WA on #5,#6

Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
int q,n,m,ans0=0,ans1=0;
double L,k;
struct node{
    double di,v,a;
}qwq[100005];
int a[100005];
vector<pair<int,int> > ans;
bool cmp(pair<int,int> x,pair<int,int> y){
    if(x.second==y.second) return x.first<y.first;
    return x.second<y.second;
}
int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-') f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+ch-'0';
        ch=getchar();
    }
    return x*f;
}
void ChongYun(){
    ans0=ans1=0; ans.clear();
    n=read(); m=read(); L=read()*1.0; k=read()*1.0;
    for(int i=1;i<=n;i++){
        qwq[i].di=read();
        qwq[i].v=read();
        qwq[i].a=read();
    }
    for(int i=1;i<=m;i++) a[i]=read();
    for(int i=1;i<=n;i++){
        int l=0,r=0;
        if(qwq[i].a==0){
            if(qwq[i].v>k&&qwq[i].di<=a[m]){
                l=lower_bound(a+1,a+m+1,qwq[i].di)-a; r=m;
                if(l<=r) ++ans0,ans.push_back({l,r});
            }
        }else if(qwq[i].a>0){
            double now=(k*k-qwq[i].v*qwq[i].v)/(2.0*qwq[i].a);
            if(qwq[i].di<=a[m]&&qwq[i].di+now<=a[m]){
                l=lower_bound(a+1,a+m+1,qwq[i].di+now)-a; r=m;
                if(l<=r) ++ans0,ans.push_back({l,r});
            }
        }else{
            double now=(k*k-qwq[i].v*qwq[i].v)/(2.0*qwq[i].a);
            if(qwq[i].v>k&&qwq[i].di<=a[m]&&now>=0){
                l=lower_bound(a+1,a+m+1,qwq[i].di)-a; 
                r=lower_bound(a+1,a+m+1,qwq[i].di+now)-a;
                if(a[r]!=qwq[i].di) r--;
                if(l<=r) ++ans0,ans.push_back({l,r});
            }
        }
    }
    printf("%lld ",ans0);
    sort(ans.begin(),ans.end(),cmp);
    int lst=0;
    for(auto i:ans){
        if(i.first>lst||lst>i.second){
            ans1++;
            lst=i.second;
        }
    }
    printf("%lld\n",m-ans1);
    return ;
}
signed main(){
    q=read();
    while(q--) ChongYun();
    return 0;
}
2024/11/7 21:59
加载中...