洛谷 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;
}
相关推荐
五月底_30 分钟前
LIS算法
python·算法·最长子序列
学学酱快乐1 小时前
2026年PMP考试生命周期选择决策树精讲:从需求判断到混合型统一框架的应试全攻略
算法·决策树·机器学习·pmp新版考试大纲·pmp新题型·pmp培训哪家好·pmp培训机构推荐
傅科摆 _ py1 小时前
动态规划复习
算法·动态规划
Wang's Blog2 小时前
PostgreSQL笔记49:向量检索核心算法、索引调优与过滤策略深度解析
笔记·算法·postgresql
疯狂打码的少年2 小时前
【数据结构】交换类排序:冒泡与快速排序
数据结构·笔记·算法·排序算法
Nil2082 小时前
leetcode 108有序数组转换为二叉搜索树
数据结构·算法·leetcode
高频因子挖掘机2 小时前
QuantDash 成交量单位统一实战:从“手”到“股”的跨市场量化数据清洗全流程
后端·算法·github
hn小菜鸡2 小时前
LeetCode 763、划分字母区间
数据结构·算法·leetcode
Escalating_xu2 小时前
【C++ STL简介】从六大组件到容器、迭代器与算法协作
java·c++·算法
纪念 2293 小时前
算法二叉树(一)
算法