首页 > 其他分享 >[CSP-S 2024] 超速检测——模拟、贪心

[CSP-S 2024] 超速检测——模拟、贪心

时间:2024-10-29 21:22:12浏览次数:6  
标签:num int 2024 超速 测速仪 主干道 CSP d0 贪心

[CSP-S 2024] 超速检测(民间数据)

题目描述

小 D 新入职了某国的交管部门,他的第一个任务是负责国家的一条长度为 \(L\) 的南北主干道的车辆超速检测。为了考考小 D,上司首先需要他解决一个简化的场景。

这个周末,主干道上预计出现 \(n\) 辆车,其中第 \(i\) 辆车从主干道上距离最南端 \(d_i\) 的位置驶入,以 \(v_i\) 的初速度和 \(a_i\) 的加速度做匀加速运动向北行驶。我们只考虑从南向北的车辆,故 \(v_i > 0\),但 \(a_i\) 可正可负,也可以为零。当车辆行驶到主干道最北端(即距离最南端为 \(L\) 的位置)或速度降为 \(0\)(这只可能在 \(a_i < 0\) 时发生)时,我们认为该车驶离主干道。

主干道上设置了 \(m\) 个测速仪,其中第 \(j\) 个测速仪位于主干道上距离最南端 \(p_j\) 的位置,每个测速仪可以设置开启或关闭。当某辆车经过某个开启的测速仪时,若这辆车的瞬时速度超过了道路限速 \(V\),那么这辆车就会被判定为超速。注意当车辆驶入与驶出主干道时,如果在对应位置有一个开启的测速仪,这个测速仪也会对这辆车进行测速。

上司首先想知道,如果所有测速仪都是开启的,那么这 \(n\) 辆车中会有多少辆车被判定为超速。

其次,为了节能,部门想关闭一部分测速仪。然而,他们不希望漏掉超速的车,也就是说,当 \(n\) 辆车里的某辆车在所有测速仪都开启时被判定为超速,他们希望在关闭一部分测速仪以后它依然被判定为超速。上司还想知道在这样的条件下最多可以关闭多少测速仪。

由于 \(n\) 很大,上司允许小 D 使用编程解决这两个问题,于是小 D 找到了你。

如果你对于加速度并不熟悉,小 D 贴心地在本题的“提示”部分提供了有关加速度的公式。

分析

贪心

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+100,M=1e6+100;
int n,m,l,lim;
int T,h[N],num,c[M];
bool w[N];
struct car
{
    int d0,v0,jia;
}g[N];
struct rang
{
    int x,y,id;
}r[N];
int lowbit(int x){return x&(-x);}
int que(int x)
{
    int sum=0;
    while(x)
    {
        sum+=c[x];
        x-=lowbit(x);
    }
    return sum;
}
void upd(int x,int z)
{
    while(x<=l)
        c[x]+=z,x+=lowbit(x);
}
void init()
{
    scanf("%d%d%d%d",&n,&m,&l,&lim);
    ++l;num=0;
    for(int i=1;i<=l;++i)c[i]=0;
    for(int i=1;i<=n;++i)
    {
        scanf("%d%d%d",&g[i].d0,&g[i].v0,&g[i].jia);
        ++g[i].d0;
    }
    for(int i=1;i<=m;++i)
    {
        scanf("%d",&h[i]);
        //cout<<h[i]<<endl;
        ++h[i];upd(h[i],1);
    }
    for(int i=1;i<=n;++i)
    {
        if(g[i].jia==0)
        {
            if(g[i].v0>lim)
            {
                if(que(l)==que(g[i].d0-1))continue;
                ++num;
                r[num].x=g[i].d0;
                r[num].y=l;
                r[num].id=num;
            }
        }
        else if(g[i].jia>0)
        {
            if(g[i].v0>lim)
            {
                if(que(l)==que(g[i].d0-1))continue;
                ++num;
                r[num].x=g[i].d0;
                r[num].y=l;
                r[num].id=num;
            }
            else
            {
                //v1^2-v0^2=2ax
                double len=(lim*lim-g[i].v0*g[i].v0)*1.0/(2.0*g[i].jia);
                int ri=min((int)ceil(len+g[i].d0),l+1);
                if(ri<=l)
                {
                    if(que(l)==que(ri-1))continue;
                    ++num;
                    r[num].x=ri;
                    r[num].y=l;
                }
            }
        }
        else
        {
            if(g[i].v0<=lim)
                continue;
            double len=(lim*lim-g[i].v0*g[i].v0)*1.0/(2.0*g[i].jia);
            int ri=min((int)floor(len+g[i].d0),l);
            if(que(ri)==que(g[i].d0-1))continue;
            ++num;
            r[num].x=g[i].d0;
            r[num].y=ri;
        }
    }

}
bool cmp(rang a,rang b)
{
    if(a.y==b.y)return a.x<b.x;
    return a.y<b.y;
}
void work()
{
    //for(int i=1;i<=num;++i)
        //printf("%d %d\n",r[i].x,r[i].y);
    printf("%d ",num);
    sort(r+1,r+1+num,cmp);
    int pos=0,ans=0;
    for(int i=1;i<=num;++i)
    {
        if(r[i].x<=h[pos])
            continue;
        else
        {
            while(pos+1<=m && h[pos+1]<=r[i].y)
                ++pos;
            ++ans;
        }
    }
    printf("%d\n",m-ans);
}

int main()
{
    cin>>T;
    while(T--)
    {
        init();
        work();
    }
    return 0;
}






标签:num,int,2024,超速,测速仪,主干道,CSP,d0,贪心
From: https://www.cnblogs.com/Glowingfire/p/18514346

相关文章

  • [题解][CSP-S2024]擂台游戏
    题意[CSP-S2024]擂台游戏(民间数据)题目描述小S想要举办一场擂台游戏,如果共有\(2^k\)名选手参加,那么游戏分为\(k\)轮进行:第一轮编号为\(1,2\)的选手进行一次对局,编号为\(3,4\)的选手进行一次对局,以此类推,编号为\(2^k-1,2^k\)的选手进行一次对局。第二轮在......
  • 2024/10/29 HTML --》关于HTML的快速入门与标签
    以下为快速入门部分点击查看代码--HTML--什么是HTML?--·HTML是一门语言,所有的网页都是用HTML这门语言编写出来的.--·HTML(HyperTextMarkupLanguage):超文本标记语言---->超文本:超越了文本的限制,比普通文本更强大。除了文字信息,还可以定义图片、音频、视频等内......
  • 题目解析_2024_申论_行政执法
    题目解析:材料1进入桃李镇清池村,通往村头停车场的路是一条环形路。据了解,这是为了绕开村头的两棵百年老树,不打破原有的自然风貌。在冯教授团队看来,树是主,人是客,人要心存敬畏,尊重自然。2020年6月,G市业大学组建城乡艺术建设研究所,冯教授任所长。2021年1月,在有关方面的牵线搭桥下,冯......
  • 『模拟赛』多校A层冲刺NOIP2024模拟赛15
    Rank一般A.追逐游戏(chase)签,但是保龄。上来发现情况好像是有限的,于是直接分讨,不过漏了n种情况,小样例水,大样例vscose自带的compare跑不出来,注销一遍之后甚至进度条都没了导致我以为过了,最后10min才发现(赛后发现二分是可做的,但是倍增的巨大常数加上逆天评测速度......
  • 2024网鼎杯初赛-青龙组-WEB gxngxngxn
    WEB01开局随便随便输入都可以登录,登上去以后生成了一个token和一个session,一个是jwt一个是flask框架的这边先伪造jwt,是国外的原题CTFtime.org/DownUnderCTF2021(线上)/JWT/Writeup先生成两个token,然后利用rsa_sign2n工具来生成公钥python3jwt_forgery.pyeyJhbGciOi......
  • CSP-S 2024 简单题
    CSP-S2024简单题以下均为考场做法。T1决斗(duel)考虑贪心,按照攻击力\(a_i\)排序,从小到大使用所有怪物进行攻击,每只怪物攻击一个在场且能击杀的怪物中,攻击力最大的一个。这样显然最优,因为每一次攻击都被完美的利用到了。于是设\(c_x\)表示满足\(a_i=x\)的\(i\)的......
  • 2024.10.29 test
    A已知\(n\)边形的一个三角剖分,你可以进行若干次“城市建造”操作,可以选择三个点并新建一个点为这三个点的内心并连边。构造方案,使得城市建造次数最少,且新图可以划分为两棵树。只需要进行一次城市建造操作,就可以使边数变为\(2n\),点数为\(n+1\),显然即可划分。考虑取出一个三......
  • 2024CSP-S游记 & (半?)退役记
    流水账,供自己回忆。(1)序幕2023年8月10号(±2天),中考完的我踏入了高中的校园,由于本蒟蒻自小学起就对信息竞赛有一定的兴趣,所以在2023年9月底学校开始寻找对各学科竞赛感兴趣的学生时,蒟蒻毫不犹豫的报名了物理竞赛[1]信息竞赛,自此拉开了我OIer生涯的序幕。[1]:在绿皮书物理竞赛的摧......
  • CSP-S 2024 游记
    \(\text{Day-28}\sim\text{-7}\)复习了两个星期dp,感觉状压十分强大,但是看得不是很透彻。\(\text{Day-6}\sim\text{-2}\)停课爽!模拟赛爽!云斗模拟赛总算让我见识了什么叫打表出省一。\(\text{Day-1}\)上午在和\(\texttt{TZYLT}\)和\(\texttt{QianXiquq}\)打板子,感......
  • 【IntelliJ IDEA】2024最新使用
    大家好!今天我非常高兴能够在这里与大家分享一份极具价值的资源——《IntelliJIDEA2024最新使用》。而IntelliJIDEA,作为业界领先的集成开发环境,以其强大的功能和出色的用户体验,成为了众多开发者的首选。这不仅包括其在代码编辑、调试、版本控制等方面的强大功能,还将涵盖如何......