当前位置:首页 > 提高组 > 洛谷P1033题(2002年NOIP提高组):基于物理公式用C++解决自由落体

洛谷P1033题(2002年NOIP提高组):基于物理公式用C++解决自由落体

20小时前

洛谷P1033题(2002年NOIP提高组):基于物理公式用C++解决自由落体 洛谷题解 物理公式 运动学建模 NOIP 提高组 第1张

一、题目解读

洛谷P1033题要求计算小车在限定时间内能接住多少自由落体的小球。输入参数包括天花板高度H、小车初始位置S1、速度V、长度L、高度K及小球数量n。题目需结合物理运动学公式,判断每个小球的初始位置是否在小车运动范围内的指定时间段内,考验对运动轨迹建模与边界条件处理的综合能力。

二、解题思路

采用“物理公式推导+区间判定”策略:

1. 时间范围计算:利用自由落体公式(t=√(2h/g))计算小球从H-K到H落地的时间区间[t_min, t_max]。

2. 位置范围推导:结合小车速度V,得出对应时间段内小车可移动的范围[s_min, s_max]。

3. 遍历判定:检查每个小球位置是否落入该区间,利用容错值(±0.0001)处理浮点数精度问题。

核心逻辑将物理运动转化为数学区间判断,避免复杂模拟,提升效率。

三、解题步骤

1. 输入参数:读取H、S1、V、L、K、n。

2. 计算时间边界:

○ t_min = √(2×(H-K)/10)(小球触及小车顶部的最晚时间)。

○ t_max = √(2×H/10)(小球落地最长时间)。

3. 推导位置区间:

○ s_min = S1 - V×t_max(小车最左端位置)。

○ s_max = S1 + L - V×t_min(小车最右端位置)。

4. 遍历小球判定:

○ 对每个小球位置ball_pos,若ball_pos∈[s_min±0.0001, s_max±0.0001],计数+1。

5. 输出结果:统计接住的小球数量count。

四、代码与注释

#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;

int main() {
    // 输入参数:H-天花板高度,S1-小车初始位置,V-小车速度,L-小车长度,K-小车高度,n-小球数量
    double H, S1, V, L, K, n;
    cin >> H >> S1 >> V >> L >> K >> n;
    
    int count = 0; // 记录能接到的小球数量

    // 计算小车运动的时间范围
    double t_min = sqrt(2 * (H - K) / 10.0); // 小车顶部刚好能接到球的最晚时间
    double t_max = sqrt(2 * H / 10.0);       // 小球落地的最长时间

    // 计算小车在这段时间内的位置范围
    double s_min = S1 - V * t_max;  // 小车最早能接到球的位置
    double s_max = S1 + L - V * t_min; // 小车最晚能接到球的位置

    // 遍历所有小球,检查是否在小车可接范围内
    for (int i = 0; i < n; ++i) {
        double ball_pos = i; // 第i个小球的初始位置
        // 检查小球位置是否在小车可接范围内
        if (ball_pos >= s_min - 0.0001 && ball_pos <= s_max + 0.0001) {
            count++;
        }
    }
    
    cout << count << endl;
    return 0;
}

五、总结

该解法巧妙融合物理公式与数学区间思想,通过精准推导时间-位置关系,将动态问题静态化。代码利用浮点数容错机制(±0.0001)规避精度误差,兼顾效率与准确性。关键点在于理解运动学模型与边界条件的转换,为处理物理模拟类问题提供典型范式。


原创内容 转载请注明出处

分享给朋友:

相关文章

洛谷P2190题解:铁路售票系统车厢计算(差分数组+前缀和优化)

洛谷P2190题解:铁路售票系统车厢计算(差分数组+前缀和优化)

一、题目解读洛谷P2190题要求解决铁路售票系统中的车厢数量计算问题。题目给定n个车站和m条订票申请,每条申请包含区间[x,y)及乘客数z。需要计算在不超载的情况下(每节车厢最多36人),满足所有乘客...

洛谷P1121题解:动态规划求解环形数组最大子段和问题(附代码注释)

洛谷P1121题解:动态规划求解环形数组最大子段和问题(附代码注释)

一、题目解读洛谷P1121题要求求解环形数组的最大子段和,即在一个环形数组中找到一个连续子段,使其元素和最大。环形数组的特殊性在于首尾元素可相连,需考虑线性子段与跨越首尾的环形子段两种情况。二、解题思...

洛谷P3393题解:基于多源BFS与Dijkstra算法求解图论最小花费路径问题

洛谷P3393题解:基于多源BFS与Dijkstra算法求解图论最小花费路径问题

一、题目解读洛谷P3393题要求在一个包含N个城市和M条双向道路的图中,求解从起点1到终点N的最小花费路径。图中存在僵尸城市(僵尸无法通过)和危险城市(由僵尸城市扩散S步后标记),需要避开所有危险城市...

洛谷P2789题解:递归算法与避免重复计算的技巧

洛谷P2789题解:递归算法与避免重复计算的技巧

一、题目解读洛谷P2789题要求计算n条直线在平面上两两相交产生的交点总数。题目强调交点不重复,需考虑平行线情况。关键点在于如何高效枚举所有可能的交点组合,并排除重复结果。二、解题思路采用递归算法,核...

洛谷P1438题解:基于线段树的等差数列

洛谷P1438题解:基于线段树的等差数列

一、题目解读洛谷P1438题要求处理数列的区间更新与单点查询操作,其中更新方式为给定区间内元素按等差数列递增。传统暴力修改会因多次区间遍历导致超时,需设计高效数据结构——线段树,结合等差数列性质实现O...

洛谷P1616题解:动态规划之完全背包问题

洛谷P1616题解:动态规划之完全背包问题

一、题目解读洛谷P1616题要求在一个包含M个活动(每个活动有固定时间和价值)的场景中,求解在总时间T内选择活动的最优组合,使得总价值最大化。活动可重复选择,需利用动态规划算法找到最优解。题目强调时间...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。