P1072新年趣事之债务解题报告

来源:互联网 发布:永恒的记忆js下载 编辑:程序博客网 时间:2024/05/01 09:46
   Name: P1072新年趣事之債務
  Copyright: 始发于goal00001111的专栏;允许自由转载,但必须注明作者和出处
  Author: goal00001111
  18-12-08 12:15
  Description:     
背景 Background      
    在HNSDFZ的信息组里,Vivian Snow、Charles和Sunnypig之间有着一种奇怪的债务关系:Vivian Snow欠了Charles一百块钱,Charles欠了Sunnypig一百块钱,Sunnypig欠了Vivian Snow一百块钱。
描述 Description     
    一天,三个人遇到了一起。由于他们都不够理智,一心想要回自己借出去的钱,于是互相之间追逐起来。最初,三个人分别站在一个边长为L正三角形的三个顶点上。某一个时刻,三个人同时开始以速度V匀速运动。他们运动的方向是这样的:每一个时刻,Vivian Snow运动的方向指向Sunnypig,Sunnypig运动的方向指向Charles,Charles运动的方向指向Vivian Snow,总之,每一个时刻,三个人都在尽快的接近各自欠自己债的人。最终,三个人都到达了同一个点上,并且通过和谈的方式解决了这一冲突。
  Xiaomengxian知道此事后,想写一篇报道,宣传这件事情。他想知道每个人走的路程的长度S,以及他们到达同一个点所需要的时间T。
输入格式 Input Format     
      输入文件有两行。
    第一行为一个实数L(0<=L<=1E100)。
    第二行为一个实数V(0<=V<=1E100)。
输出格式 Output Format     
      输出文件有两行。
    第一行为一个实数S,保留一位小数。
    第二行为一个实数T,保留一位小数。
样例输入 Sample Input     
      13.05
    0.56
样例输出 Sample Output     
      8.7
    15.5
    
题目分析:
    本题看似很难,因为三人的运动方向时刻变化。似乎可以利用数学函数和极限的思想来解,但是我不会。
    所幸我学了物理,恰好又懂得点矢量的分解原理,速度是矢量,根据运动学公式:位移=平均速度*时间。
    三人最终相聚于正三角形的中心。由于三人的速率不变,所以平均速度和平均速率大小相等。
    将某人的速度分解到指向中心方向为v = Vcos30',位移为顶点到中心的距离,即s = L/sqrt(3)。
    所以时间为t = s/v = 2L/3V;路程为S=Vt。  
说明:
算法思想:速度分解和运动学原理。
数据结构:基本数据类型。
时间复杂度:O(1);
空间复杂度:O(1);
程序语言:分别用c++和pascal实现。
附注:不懂速度分解和运动学公式的去看看高中物理书吧。

C++代码:
 
#include<iostream>
#include <iomanip>

using namespace std;

int main(int argc, char* argv[])
{
    double L, V, S, T;
    
    cin >> L >> V;
    T = 2 * L / 3 / V;//s = L/sqrt(3); v = Vcos30';t = s/v = 2L/3V
    S = V * T;
    cout << setiosflags(ios::fixed) << setprecision(1) << S <<endl; //保留一位小數
    cout << setiosflags(ios::fixed) << setprecision(1) << T <<endl; //保留一位小數
    
    system("pause");
    return 0;
}

PASCAL代码:

PROGRAM P1072 (INPUT, OUTPUT);
VAR
    L, V, S, T : REAL;
BEGIN
    READ(L);
    READ(V);
    T := 2 * L / 3 / V;
    S := V * T;
    WRITELN(S:1:1);
    WRITELN(T:1:1);
END.

原创粉丝点击