9.11做题记录
练习构造题的一天
做构造题让我感觉自己像个zz。
CF743C Vladik and fractions
题面翻译
题目描述
请找出一组合法的解使得\(\frac {1}{x} + \frac{1}{y} + \frac {1}{z} = \frac {2}{n}\)成立
其中\(x,y,z\)为正整数并且互不相同
输入
一个整数\(n\)
输出
一组合法的解\(x, y ,z\),用空格隔开
若不存在合法的解,输出\(-1\)
数据范围
对于\(100\)%的数据满足\(n \leq 10^4\)
要求答案中\(x,y,z \leq 2* 10^{9}\)
样例 #1
样例输入 #1
3
样例输出 #1
2 7 42
样例 #2
样例输入 #2
7
样例输出 #2
7 8 56
提示
对于\(100\)%的数据满足\(n \leq 10^4\)
要求答案中\(x,y,z \leq 2* 10^{9}\)
\(solution\)
本蒟蒻练习的第一道构造题目。
\[\frac {1}{x} + \frac{1}{y} + \frac {1}{z} = \frac {2}{n}
\]
我们发现右边的 \(\frac{2}{n}\) 很有违和感,所以我们把右边变为 \(\frac{1}{n}\) 。
所以 \(x,y,z\) 中必然存在一个数等于 \(n\) 。
我们可以假设 \(z=n\) ,那么我们的式子变为:
\[\frac{1}{x}+\frac{1}{y}=\frac{1}{n}
\]
根据裂项公式,我们知道:
\[\frac{1}{n}=\frac{1}{n+1}+\frac{1}{n \times (n+1)}
\]
所以我们会有一组固定的解 \(\{n,n+1,n \times (n+1)\}\) 。
当 \(n \le 1\) 时无解,因为 \(x,y,z\) 都是正整数,所以不可能计算出负数。
\(n=1\) 时无解是因为 \(n=1\) 时 \(n+1=n \times (n+1)\) 。
\(code\)
#include<iostream>
using namespace std;
int n;
int main()
{
scanf("%d",&n);
if(n<=1) printf("-1");
else
printf("%d %d %d",n,n+1,n*(n+1));
return 0;
}