题解 P7578 【「RdOI R2」数(number)】

Thomas_Cat

2021-04-17 23:45:36

Solution

签到题。 由题意知道题目中由三种输入方式分别为是 $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; } ```