一切都会过去的
昨晚div2的D题,赶巧C题算是个树形DP(也不算吧),比较好写,1个小时做完A,B,C,开始长达1个半小时的罚坐,D题一看过的人很少,大脑瞬间给自己的反馈是自己肯定做不出来,原来对自己已经这么没信心了
于是随便写了个假算法交上去,WA3,
然后闲的锁了A题,第一次hack别人
然后那个人的代码我出的数据在我自己本地跑了2s多,
一想肯定超时,于是hack了一下,失败,我倒扣50分,无语。。。
一看codeforces上才跑了15ms?????
低估了个人计算机和服务器的差距啊。。。。。
今天醒来,看到群友说昨天的D题是个二分,突然反应过来了,哎,昨晚也没仔细思考,1e5的数据,要么是O(n),要么是O(nlogn),而O(nlogn)首先就很容易想到二分。
三种颜色,首先定下一种颜色,其余两种颜色二分查找,不断更新最小值即可
代码:
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll r[100005],g[100005],b[100005];
ll query(ll x,ll y,ll z)
{
return (x-y)*(x-y)+(x-z)*(x-z)+(y-z)*(y-z);}
int main()
{
ll t,nr,ng,nb;
scanf("%lld",&t);
while(t--)
{
scanf("%lld %lld %lld",&nr,&ng,&nb);
for(int i=0;i<nr;i++)
{
scanf("%lld",&r[i]);}
for(int i=0;i<ng;i++)
{
scanf("%lld",&g[i]);}
for(int i=0;i<nb;i++)
{
scanf("%lld",&b[i]);}
sort(r,r+nr);
sort(g,g+ng);
sort(b,b+nb);
ll ans=9223372036854775807;
for(int i=0;i<nr;i++)
{
ll a1=lower_bound(g,g+ng,r[i])-g;
if(a1==ng){
a1=ng-1;}
ll a2=lower_bound(b,b+nb,r[i])-b;
if(a2==nb){
a2=nb-1;}
ans=min(ans,query(r[i],g[a1],b[a2]));
if(a1!=0)
{
ans=min(ans,query(r[i],g[a1-1],b[a2]));
if(a2!=0)
{
ans=min(ans,query(r[i],g[a1-1],b[a2-1]));
ans=min(ans,query(r[i],g[a1],b[a2-1]));
}
}
else
{
if(a2!=0)
{
ans=min(ans,query(r[i],g[a1],b[a2-1]));}
}
}
for(int i=0;i<ng;i++)
{
ll a1=lower_bound(r,r+nr,g[i])-r;
if(a1==nr){
a1=nr-1;}
ll a2=lower_bound(b,b+nb,g[i])-b;
if(a2==nb){
a2=nb-1;}
ans=min(ans,query(g[i],r[a1],b[a2]));
if(a1!=0)
{
ans=min(ans,query(g[i],r[a1-1],b[a2]));
if(a2!=0)
{
ans=min(ans,query(g[i],r[a1],b[a2-1]));
ans=min(ans,query(g[i],r[a1-1],b[a2-1]));
}
}
else
{
if(a2!=0)
{
ans=min(ans,query(g[i],r[a1],b[a2-1]));}
}
}
for(int i=0;i<nb;i++)
{
ll a1=lower_bound(r,r+nr,b[i])-r;
if(a1==nr){
a1=nr-1;}
ll a2=lower_bound(g,g+ng,b[i])-g;
if(a2==ng){
a2=ng-1;}
ans=min(ans,query(b[i],r[a1],g[a2]));
if(a1!=0)
{
ans=min(ans,query(b[i],r[a1-1],g[a2]));
if(a2!=0)
{
ans=min(ans,query(b[i],r[a1],g[a2-1]));
ans=min(ans,query(b[i],r[a1-1],g[a2-1]));
}
}
else
{
if(a2!=0)
{
ans=min(ans,query(b[i],r[a1],g[a2-1]));}
}
}
printf("%lld\n",ans);
}
return 0;
}