首页 > 其他分享 >[CSP-S 2024] 超速检测(二分+大模拟)

[CSP-S 2024] 超速检测(二分+大模拟)

时间:2024-11-29 15:57:31浏览次数:3  
标签:cnt int double ll mid 2024 超速 qd CSP

题目传送门icon-default.png?t=O83Ahttps://www.luogu.com.cn/problem/P11232都怪比赛时的自己太懒了,只做了特殊性质 A 的 20 pts。

解题思路

首先,我们可以把每辆超速的车的超速区间算出来(这个可以用二分解决)。

这样可以解决第一个小问(有多少辆车会被测出超速)。

对于第二个小问,我们可以做一个类似于线段覆盖的贪心……

先把区间的右端点从小到大排个序,对于一个区间的左端点 l,如果我们前面选的区间的右端点 r 是 <l 的话,那么就需要选上这个区间。

思路很容易想到,但是代码有点小长,请耐心阅读。

代码

#include<bits/stdc++.h>
using namespace std;
#define double long double
int q;
int n,m,l;
double v;
int p[100001];
struct car{
	int d;
	double v,a;
	//从d驶入,初始速度v,加速ai 
}a[100001];
struct node{
	int l,r;
}qp[100001];
int cnt,ans;
double speed(double v0,double ai,double s)//计算瞬时速度 
{
	if(v0*v0+2.0*ai*s<0)return 0;
	return sqrt(v0*v0+2.0*ai*s);
}
bool cmp(node x,node y)
{
	if(x.r==y.r)return x.l<y.l;
	return x.r<y.r;
}
void erfen()
{
	int ll,rr,mid;
	int wz,qd;

	for(int i=1;i<=n;i++)
	{
		if(a[i].v-v<=0.0&&a[i].a<=0)continue;//这些车是绝对不超速的 
		
		if(a[i].a>0)//ai>0的情况 
		{
			ll=1,rr=m;
			wz=-1;
			qd=-1;
			while(ll<=rr)//二分出车辆驶入后第一个遇到的测速仪 
			{
				mid=(ll+rr)>>1;
				if(p[mid]>=a[i].d)
				{
					qd=mid;
					rr=mid-1;
				}
				else
					ll=mid+1;
			}
			if(qd==-1)continue;//如果没有遇到测速仪,那么不超速 
			ll=qd,rr=m;
			while(ll<=rr)//枚举第一个测出这个车超速的测速仪 
			{
				mid=(ll+rr)>>1;
				if(speed(a[i].v,a[i].a,p[mid]-a[i].d)-v>0.0)
				{
					wz=mid;
					rr=mid-1;
				}
				else
					ll=mid+1;
			}
			if(wz!=-1)//统计区间 
			{
				cnt++;
				qp[cnt].l=wz;
				qp[cnt].r=m;
			}
		}
		else{//若ai<=0 
			ll=1,rr=m;
			wz=-1,qd=-1;
			while(ll<=rr)//枚举起点测速仪 
			{
				mid=(ll+rr)>>1;
				if(p[mid]>=a[i].d)
				{
					rr=mid-1;
					qd=mid;
				}
				else
					ll=mid+1;
			}
			if(qd==-1)continue;//同上 
			ll=qd,rr=m;
			while(ll<=rr)
			{
				mid=(ll+rr)>>1;
				if(speed(a[i].v,a[i].a,p[mid]-a[i].d)-v>0.0)//枚举最后一个能测到它超速的测速仪 
				{
					wz=mid;
					ll=mid+1;
				}
				else
					rr=mid-1;
			}
			if(wz!=-1)//统计区间 
			{
				cnt++;
				qp[cnt].l=qd;
				qp[cnt].r=wz;
			}
		}
	}
}
void init()//初始化 
{
	ans=0,cnt=0;
}
int main()
{
//	freopen("detect3.in","r",stdin);
//	freopen("www.txt","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>q;
	while(q--)
	{
		init();
		cin>>n>>m>>l>>v;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i].d>>a[i].v>>a[i].a;
		}
		for(int i=1;i<=m;i++)
		{
			cin>>p[i];
		}
		erfen();
		sort(qp+1,qp+cnt+1,cmp);//类似于线段覆盖 
		int temp=0;
		for(int i=1;i<=cnt;i++)
		{
			if(temp<qp[i].l)
			{
				ans++;
				temp=qp[i].r;
			}
		}
		cout<<cnt<<" "<<m-ans<<endl;
	}
}

标签:cnt,int,double,ll,mid,2024,超速,qd,CSP
From: https://blog.csdn.net/2403_87021226/article/details/144127346

相关文章

  • 2024年入职/转行网络安全,该如何规划?_网络安全职业规划
     前言前段时间,知名机构麦可思研究院发布了 《2022年中国本科生就业报告》,其中详细列出近五年的本科绿牌专业,其中,信息安全位列第一。网络安全前景对于网络安全的发展与就业前景,想必无需我多言,作为当下应届生收入较高的专业之一,网络安全同样也在转行领域中占据热门位置,主要......
  • # 20222403 2024-2025-1 《网络与系统攻防技术》实验七实验报告
    1.实验内容本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有(1)简单应用SET工具建立冒名网站(2)ettercapDNSspoof(3)结合应用两种技术,用DNSspoof引导特定访问到冒名网站。2.实验过程2.1简单应用SET工具建立冒名网站攻击机kali的IP地址......
  • 【Python学习】2024Python安装与配置IDE汉化集活的全套教程
    包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】领取!【一】Python解释器下载【运行环境】【1】Python官网包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】![https://www.python.org](官网进不去的可以点击点击领取,100%免费!安装包)......
  • 2024年Python&pycharmIDE安装与配置汉化教程!
    【一】Python解释器下载【运行环境】包含编程资料、学习路线图、源代码、软件安装包等!【[点击这里]】!【1】Python官网[https://www.python.org](官网进不去的可以点击点击领取,100%免费!安装包)【2】Python各版本解释器官网【二】Windows系统安装Python解释器【1】......
  • 【2024认证杯小美赛A题】完整解析与代码分享(独家思路)
    A题木星:保护者还是威胁者1问题的概要1.1问题1:小行星带对地球的威胁评估1.2问题2:奥尔特云对地球的威胁分析1.3问题3:木星质量和轨道变化对威胁的影响2问题1:小行星带对地球的威胁评估2.1问题概要2.2数学模型2.2.1木星引力场的作用2.2.2轨道扰动模型2.2.3轨......
  • 2024.11.29 周五
    2024.11.29周五Q1.1200给定黑白保龄球a,b个,设合法摆放为:金字塔形状,每层个数1,2,3...,且每层颜色相同。问最多可合法摆放层数的数量。Q2.1400三种特定的木头长度18,21,25,一根长度为60的木头可以截成多段。分别需要n根长度为18,21,25的木头,问最少需要多少长度为60的木头。......
  • 华为OD机试真题-ai面板识别-2024年OD统一考试(E卷)
    最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客     每一题都含有详细的解题思路和代码注释,精编c++、JAVA、Python三种语言解法。帮助每一位考生轻松、高效刷题。订阅后永久可看,发现新题及时跟新。题目描述AI识别到面板上有N(1......
  • 华为OD2024机试最新E卷题库-(A+B+C+D+E)
    在这个精心策划的专栏中,我们聚焦于华为OD2024机试的最新E卷题库,涵盖JS、C、C++、Java与Python五大编程语言,旨在为挑战者提供全面而深入的备战资源。这里不仅有精选的实战题目,还有详尽的解题思路与代码实现,帮助你掌握核心算法,理解数据结构,提升编程技巧。以下是每个卷宗的详细,可......
  • 华为OD- 斗地主之顺子-2024年OD(E卷)
    题目描述在斗地主扑克牌游戏中,扑克牌由小到大的顺序为:3,4,5,6,7,8,9,10,J,Q,K,A,2,玩家可以出的扑克牌阵型有:单张、对子、顺子、飞机、炸弹等。其中顺子的出牌规则为:由至少5张由小到大连续递增的扑克牌组成,且不能包含2。例如:{3,4,5,6,7}、{3,4,5,6,7,8,9,10,J,Q,K,A}都是有......
  • 华为OD- 流浪地球-2024年OD(E卷)
    题目描述流浪地球计划在赤道上均匀部署了N个转向发动机,按位置顺序编号为0~N初始状态下所有的发动机都是未启动状态发动机启动的方式分为“手动启动”和“关联启动”两种方式如果在时刻1一个发动机被启动,下一个时刻2与之相邻的两个发动机就会被“关联启动”如......