洛谷 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;
}
相关推荐
不做无法实现的梦~4 分钟前
基于 PX4 的全仓库架构、无人机算法解析与开发学习规划
算法·架构·无人机
做cv的小昊9 分钟前
【大模型算法自学笔记01】NLP基础知识(1.1 自注意力)
人工智能·笔记·算法·自然语言处理·大模型·llm
stolentime34 分钟前
AT_arc182_a [ARC182A] Chmax Rush!题解
数据结构·c++·算法·动态规划
longlongzihan35 分钟前
LeetCode 189. 轮转数组:从直观模拟到最优原地算法
c++·算法·leetcode
爱喝热水的呀哈喽40 分钟前
cpp二分库函数 lambda捕获
算法
longlongzihan1 小时前
LeetCode 76. 最小覆盖子串:滑动窗口算法详解
算法·leetcode·滑动窗口
怕浪猫10 小时前
RAG 面试 6 连问,从原理到优化全部覆盖
python·算法·面试
无线通信科研笔记10 小时前
IEEE TVT 2026 论文精读与完整复现|相位误差如何重塑近场 RIS 的幅相响应
论文阅读·人工智能·python·算法·论文笔记
mmmmath_311 小时前
二叉树の递归遍历
算法
All for pursuit.11 小时前
【位运算-1】338.比特位计数
数据结构·c++·算法·leetcode