给定四个整数 a , b , c , d a,b,c,d a,b,c,d,你需要求出一组 a ≤ x ≤ b a\le x\le b a≤x≤b, b ≤ y ≤ c b\le y\le c b≤y≤c, c ≤ z ≤ d c\le z\le d c≤z≤d,使得以 x , y , z x,y,z x,y,z 为三条边的长度能够组成一个三角形。如果有多种方案,输出任意一种。
输入包含多组数据,数据组数不超过 1000 1000 1000, 1 ≤ a ≤ b ≤ c ≤ d ≤ 1 0 9 1\le a\le b\le c\le d\le 10^9 1≤a≤b≤c≤d≤109。
translate by @ShineEternal。
这种构造类型的题目我们可以通过找特殊值来实现。
不难发现, a , b , c , d a,b,c,d a,b,c,d 单调递增,所以 x , y , z x,y,z x,y,z 也会单调递增。这时只需要满足 x + y > z x+y>z x+y>z 就行了。
我们把 x , y x,y x,y 取最大值: x = b , y = c x=b,y=c x=b,y=c; z z z 取最小值: z = c z=c z=c。就是最有可能实现的方案。
这时我们发现 x + y > z x+y>z x+y>z,说明一定能实现。所以直接输出 b c c
即可。
#include
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
printf("%d %d %d\n",b,c,c);
}
return 0;
}