题解 P7578 【「RdOI R2」数(number)】
Thomas_Cat
2021-04-17 23:45:36
签到题。
由题意知道题目中由三种输入方式分别为是 $x-y,x-z,y-z$ 其中 $(x>y>z)$。
因此题目可以简化为:
得出 $x-y,x-z,y-z$ 中任意一个并且按照题目中所给的比例求出 $x,y,z$ 即可,$x,y,z$ 即为 $3:2:1$ 的关系。
一些证明:(设 $a-b,b-c=1$)
任何一个比例 $a:b:c$ 都可以化成 $1:\dfrac{b}{a}:\dfrac{c}{a}$。
任何一个满足条件的比例都可以写成 $1:a:b \times a-1$,因为 $\dfrac{(b \times a-1+1)} {a} = b$。
$b$ 是一个整数,所以最后就是要 $ba-1$ “整除” $a+1$
显然 $a+1 \ge ba-1$
那么 $(b-1)a \le 2$
$b$ 是整数,而且这里 $a>1$ ,那么 $b$ 就是 $2$ 或 $1$。
因为 $1<a<b\times a-1$,所以如果 $b=1$ , 那么则有 $1<a<a-1$,矛盾。
所以 $b$ 只能是 $2$ ,于是转化为一个 $2a-1$“整除”$a+1$。
注意 $2a-1$ 除以 $a+1$ 的值不可能大于等于 $2$,所以 $2a-1=a+1$,解出 $a = 2$。
于是最后得到的比例就是:$1:2:3$。
也就是 $b \times a = 1 = 2 \times 2 - 1 = 3$。
代码如下:
```cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
unsigned long long t;
cin>>t;
while(t--){
string s;
unsigned long long n;
cin>>s>>n;
if(s=="x-y")
cout<<3*n<<' '<<2*n<<' '<<n<<endl;
if(s=="y-z")
cout<<3*n<<' '<<2*n<<' '<<n<<endl;
if(s=="x-z")
cout<<3*n/2<<' '<<2*n/2<<' '<<n/2<<endl;
}
return 0;
}
```