Xenia e as gemas coloridas CodeForces-1337D (matemática + dois pontos)

Xenia é uma garota nascida nobre. Devido à inflexibilidade e aspereza de sua família, Xenia precisa encontrar algumas maneiras de se divertir.

Recentemente, a Xenia comprou gemas nr vermelhas, gemas verdes e gemas azuis nb. Cada uma das gemas tem um peso.

Agora, ela vai pegar três jóias.

Xenia adora coisas coloridas, então ela escolhe exatamente uma gema de cada cor.

Xenia adora equilíbrio, então ela tentará escolher pedras com pouca diferença de peso.

Especificamente, supondo que os pesos das gemas escolhidas sejam x, ye z, Xenia deseja encontrar o valor mínimo de (x − y) 2+ (y − z) 2+ (z − x) 2. Como sua querida amiga, você pode ajudá-la?

Entrada
A primeira linha contém um único número inteiro t (1≤t≤100) - o número de casos de teste. Em seguida, seguem os casos de teste.

A primeira linha de cada caso de teste contém três números inteiros nr, ng, nb (1≤nr, ng, nb≤105) - o número de gemas vermelhas, verdes e azuis e azuis, respectivamente.

A segunda linha de cada caso de teste contém nr números inteiros r1, r2,…, rnr (1≤ri≤109) - ri é o peso da i-ésima gema vermelha.

A terceira linha de cada caso de teste contém ng números inteiros g1, g2,…, gng (1≤gi≤109) - gi é o peso da i-ésima gema verde.

A quarta linha de cada caso de teste contém nb números inteiros b1, b2,…, bnb (1≤bi≤109) - bi é o peso da i-ésima gema azul.

É garantido que ∑nr≤105, ngng105, ∑nb≤105 (a soma de todos os casos de teste).

Saída
Para cada caso de teste, imprima uma linha contendo um número inteiro - o valor mínimo que Xenia deseja encontrar.

Exemplo
Entrada
5
2 2 3
7 8
6 3
3 1 4
1 1 1
1
1
1000000000
2 2 2
1 2
5 4
6 7
2 2 2
1 2
3 4
6 7
3 4 1
3 2 1
7 3 3 4
6
Saída
14
1999999996000000002
24
24
14
Nota
No primeiro caso de teste, Xenia possui as seguintes gemas:

Se ela escolher a gema vermelha com peso 7, a gema verde com peso 6 e a gema azul com peso 4, ela alcançará a seleção mais equilibrada com (x − y) 2+ (y − z) 2+ (z− x) 2 = (7−6) 2+ (6−4) 2+ (4−7) 2 = 14.
Idéia: Quando os três números são quase os mesmos que os três, a fórmula acima será esgotada Provavelmente pequeno. Os três números selecionados devem ser grandes e pequenos, portanto, corrigimos uma matriz, vamos para as outras duas matrizes, uma matriz para encontrar o primeiro número maior que ou igual a ele e a outra para encontrar o primeiro número menor ou igual a ele E, em seguida, pegue o valor mínimo de acordo com a resposta acima. Existem três matrizes no total, portanto, existem seis combinações no total. O (6nlogn) O
código é o seguinte:

#include<bits/stdc++.h>
#define ll long long
using namespace std;

const int maxx=1e5+100;
ll r[maxx],g[maxx],b[maxx];
int nr,ng,nb;

inline ll judge(ll a[],int na,ll b[],int nb,ll c[],int nc)
{
	ll x,y,z;
	ll ans=3e18;
	for(int i=1;i<=na;i++)
	{
		x=a[i];
		int pos1=lower_bound(b+1,b+nb+1,x)-b;
		int pos2=upper_bound(c+1,c+nc+1,x)-c;
		if(pos2==1||pos1>nb) continue;
		pos2--;
		y=b[pos1];
		z=c[pos2];
		ans=min(ans,((x-y)*(x-y)+(x-z)*(x-z)+(z-y)*(z-y)));
	}
	return ans;
}
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d%d",&nr,&ng,&nb);
		for(int i=1;i<=nr;i++) cin>>r[i];
		for(int i=1;i<=ng;i++) cin>>g[i];
		for(int i=1;i<=nb;i++) cin>>b[i];
		sort(g+1,g+1+ng);
		sort(b+1,b+1+nb);
		sort(r+1,r+1+nr);
		ll ans=3e18;
		ans=min(ans,judge(r,nr,g,ng,b,nb));
		ans=min(ans,judge(r,nr,b,nb,g,ng));
		ans=min(ans,judge(g,ng,r,nr,b,nb));
		ans=min(ans,judge(g,ng,b,nb,r,nr));
		ans=min(ans,judge(b,nb,r,nr,g,ng));
		ans=min(ans,judge(b,nb,g,ng,r,nr));
		cout<<ans<<endl;
	}
	return 0;
}

Esta questão é um pouco desconfortável por um longo tempo. .
Vamos lá, ( o ) / ~

Publicado 668 artigos originais · elogiou 118 · mais de 50.000 visualizações

Acho que você gosta

Origin blog.csdn.net/starlet_kiss/article/details/105599843
Recomendado
Clasificación