A27940. 三元组的离心力
填空题
中等
知识点
题目描述
三元组的离心力
题目描述
三元组 (a,b,c) 的“离心力”定义为 |a-b|+|b-c|+|c-a|。现给定三个非空的整数集合 S1、S2、S3,请你找出所有跨这三个集合的三元组 (a,b,c)(即 a∈ S1,b∈ S2,c∈ S3)的最小离心力。
输入
输入第一行给出三个不超过 104 的正整数 n1、n2、n3,依次为集合 S1、S2、S3 中元素的个数(注意一个集合内没有相同的元素)。随后三行,顺次给出三个集合的元素,均为 [-104,104] 内的整数。同行数字间以空格分隔。
输出
在一行中输出 `LiXinLi(a, b, c) = d`,其中 `(a, b, c)` 是具有最小离心力的三元组,`d` 是对应的离心力。如果解不唯一,输出那个最大的解。 注意:(a1,a2,a3)>(b1,b2,b3) 是指,存在 1≤k≤3 使得 ai=bi 对 1≤i< k 成立,并且 ak>bk。 提示:下方输出样例中注意到样例实际上有两组解,另外一组解是 (9, 10, 9)。因为 (11, 11, 12) 比较大,所以输出的是这组解。
输入样例
4 4 6
0 9 -1 11
10 -25 11 -10
9 2 41 17 12 30输出样例
LiXinLi(11, 11, 12) = 2提示
注意到样例实际上有两组解,另外一组解是 (9, 10, 9)。因为 (11, 11, 12) 比较大,所以输出的是这组解。
参考答案
#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std;
int n1,n2,n3;
int a[110];
int b[110];
int c[110];
int x,y,z = 0;
int main()
{
cin>>n1>>n2>>n3;
for(int i = 0;i<n1;i++)
{
cin>>a[i];
}
for(int i = 0;i<n2;i++)
{
cin>>b[i];
}
for(int i = 0;i<n3;i++)
{
cin>>c[i];
}
int p = 9999;
for(int i = 0;i<n1;i++)
{
for(int j = 0;j<n2;j++)
{
for(int k = 0;k<n3;k++)
{
p = min(p,(a[i]-b[j])+(b[j]-c[k])+(c[k]-a[i]));
x = a[i];
y = b[j];
z = c[z];
}
}
}
cout<<"lixinli"<<"("<<x<<","<<y<<","<<z<<")"<<" "<<"="<<" "<<p;
return 0;
}
上一题
下一题