洛谷 P15553 [CCPC 2025 哈尔滨站] 液压机

Analysis\color{blue}{\texttt{Analysis}}Analysis

由于上下两块板相向移动,因此它们的相遇点是可以算出来的,而这个相遇点就是小球被夹逼所在的点。即小球被夹逼时的纵坐标可以算出来,同理小球被夹逼前需要的时间也是可以算出来的。这就是大名鼎鼎的夹逼定理!

对于横坐标,直接暴力模拟这个过程就可以了。注意需要特判小球追不上板的情况。小球追不上板有两种情况:

  1. 小球速度太慢了。这种情况小球永远追不上板。
  2. 时间不够了。小球理论上能追上,但剩余时间不够了。

总之按照题意模拟就可以了。

Code\color{blue}{\text{Code}}Code

cpp 复制代码
void Main(){
	cin>>T;
	while (T--){
		cin>>xb>>yb>>vx>>vy;
		cin>>y_1>>y_2>>vy1>>vy2;
		cin>>x_1>>x_2>>vx1>>vx2;
		
		double ansy;
		double meet_time=(y_2-y_1)/(vy1+vy2);
		ansy=y_1+vy1*meet_time;
		
		if (abs(vx1)<=eps&&abs(vx2)<=eps){
			double period=2.0*(x_2-x_1)/vx;
			
			meet_time=fmod(meet_time,period); 
		}
		//左右两块板都不动,有周期可以简化 
		
		while (meet_time>=eps){
			double time_cost=0;
			
			if (vx>=eps){
				if (vx2-vx>=eps)
					time_cost=meet_time;//球追不上板 
				else{
					time_cost=(x_2-xb)/(vx-vx2);
					
					if (time_cost>meet_time)
						time_cost=meet_time;//时间不够了 
				}
			}//向右移动 
			else{
				double vt=-vx;
				if (vx1-vt>=eps)
					time_cost=meet_time;
				else{
					time_cost=(xb-x_1)/(vt-vx1);
					
					if (time_cost>meet_time)
						time_cost=meet_time;
				}
			}
			
			x_2+=vx2*time_cost;
			x_1-=vx1*time_cost;
			
			meet_time-=time_cost;
			
			xb+=vx*time_cost;
			vx=-vx;
		}
		
		printf("%.12lf %.12lf\n",xb,ansy);
	} 
	
	return 0;
}
相关推荐
GreenTea8 小时前
vLLM 与 SGLang KV Cache 底层实现机制深度调研报告
前端·后端·算法
Bode_20028 小时前
多资源规划(含生产调度、库存管理及产能规划)的创新优化算法
算法·调度
土司大王9 小时前
LeetCode hot100——35.搜索插入位置:Java 二分模板、左闭右开区间与插入点分析
java·算法·leetcode
微三云生态系统架构师-彭丹9 小时前
远方好物S2B2C系统架构:一级分销与保证金托管的合规技术实现
人工智能·算法
土司大王9 小时前
LeetCode hot100——34.在排序数组中查找元素的第一个和最后一个位置:Java 二分模板、边界分析
java·算法·leetcode
罗西的思考11 小时前
机器人模型(WM / WAM / VLA)综合分析与对比:从「看」到「想」再到「做」
人工智能·算法·机器学习
小哈里12 小时前
【知识】从学科到实践:自然・工程・社科・人文|算法・研发・产品・品牌设计
程序人生·算法·产品·设计·工程
小π军12 小时前
最大重叠区间数量
数据结构·算法
镜像视界(浙江)科技有限公司13 小时前
《视频孪生之上:二维展示终结,三维空间计算重构城市逻辑》——跨摄像连续表达 × 三角测量厘米级定位 × 动态轨迹建模,构建新一代城市空间
大数据·人工智能·算法·矩阵·音视频·空间计算
a1879272183113 小时前
【算法】双指针与滑动窗口(二):滑动窗口——吃进、判定、吐出
算法·leetcode·双指针·滑动窗口·原理·模板·算法讲解