洛谷CF1337A Ichihime and Triangle 题解

description

  • 给定四个整数 a , b , c , d a,b,c,d a,b,c,d,你需要求出一组 a ≤ x ≤ b a\le x\le b axb b ≤ y ≤ c b\le y\le c byc c ≤ z ≤ d c\le z\le d czd,使得以 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 1abcd109

  • translate by @ShineEternal。

solution

这种构造类型的题目我们可以通过找特殊值来实现。

不难发现, 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 即可。

code:

#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;
} 

你可能感兴趣的:(codeforces刷题题解,洛谷刷题)