P10423 题解
题目分析
-
试题 A:握手问题
在一次
50 个人的会议中大家进行了握手交流,其中有7 个没有相互握手,我们需要求出这些人之间一共进行了多少次握手。 -
试题 B:小球反弹
有一个小球在一个长方形内部左上角顶点开始运动,我们需要求出从小球出发到其第一次回到左上角顶点这段时间里,小球运动的路程为多少单位长度。
思路
-
试题 A:握手问题
共
50 个人,其中7 个人没有互相握手,所以其他的43 人都是与42 个人握了手。因为
A 和B 握手的同时也意味着B 和A 握手了,算作一次握手。所以要算这43 人的握手次数,相当于从43 人中选出2 人进行组合。即C_{43}^2 。需要注意的是,那
7 人不是没有跟任何人握手,而是7 人之间没有握手,每个人都与其他的43 人握了手。所以这7 人总共的握手次数为7 \times 43 = 301 次。所以答案为
C_{43}^2 + 301 = \dfrac{43 \times 42}{2 \times 1} + 301 = 1204 次。 -
试题 B:小球反弹
长方形的长
x 为343720 ,宽y 为233333 。小球分解到长宽两个方向上的速率之比为dx : dy = 15 : 17 。因为水平方向来回的路程为
2x ,竖直方向为2y 。所以小球在左上角时,水平走了
2x \times k_1 个单位长度,竖直走了2y \times k_2 个单位长度。假设小球运动回左上角的时间为a 。由题得
a \times dx 和0 除以2x 的余数相同,a \times dy 和0 除以2y 的余数相同。也就是说
a \times dx = k_1 \times 2x\\ a \times dy = k_2 \times 2y \end{cases} 并且
k_1,k_2 都是整数。\therefore a = \dfrac{k_1 \times 2x}{dx} = \dfrac{k_2 \times 2y}{dy} \therefore \dfrac{k_1 \times 2x}{dx} \times dx \times dy = \dfrac{k_2 \times 2y}{dy} \times dx \times dy \therefore k_1 \times 2x \times dy = k_2 \times 2y \times dx \therefore\dfrac{k_1}{k_2} = \dfrac{2y \times dx}{2x \times dy} \therefore\dfrac{k_1}{k_2} = \dfrac{y \times dx}{x \times dy} \therefore\dfrac{k_1}{k_2} = \dfrac{15y}{17x} 当
k_1,k_2 最小时2x \times k_1 和2y \times k_2 分别为出发后第一次回到左上角时水平方向和竖直方向走的路程。此时求出
15y 和17x 的最大公因数b 为3305 。然后15y 和17x 分别除以b ,就能得到k_1 = \dfrac{15y}{b}=\dfrac{15y}{3305}=1059,k_2=\dfrac{17x}{b}=\dfrac{17x}{3305}=1768 。把
k_1 = 1059,k_2=1768 代入a =\dfrac{k_1 \times 2x}{dx} = \dfrac{k_2 \times 2y}{dy} ,得出a\times dx=7.27998960 \times 10^8,a \times dy = 8.25065488 \times 10^8 。那么就能算出总路程为
\sqrt{(a \times dx)^2 + (a \times dy)^2}=1.10032519977 \times 10^9 。
C++ 代码实现
#include<bits/stdc++.h>
using namespace std;
int main()
{
string ans [] =
{
"1204",
"1100325199.77",
};
char T;
cin >> T;
cout << ans[T - 'A'] << endl;
return 0;
}