社区讨论

样例没过求调

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 条回复,欢迎继续交流。

正在加载回复...