思路:

就是在立方体区域内找一点,使平方距离和最小。 有点傻,直接暴力分情况讨论了27种情况。。。


代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;

int main()
{
	int x0,y0,z0;
	int x1,y1,z1;
	int x2,y2,z2;
	while(scanf("%d%d%d%d%d%d%d%d%d",&x0,&y0,&z0,&x1,&y1,&z1,&x2,&y2,&z2)!=EOF)
	{
		long long res=0;
		if(x0>=x1&&x0<=x2&&y0>=y1&&y0<=y2&&z0>=z1&&z0<=z2)
		{
			res=0;
		}
		else if(x0>=x1&&x0<=x2&&y0<y1&&z0>=z1&&z0<=z2)
		{
			res=(y0-y1)*(y0-y1);
		}
		else if(x0>=x1&&x0<=x2&&y0>y2&&z0>=z1&&z0<=z2)
		{
			res=(y0-y2)*(y0-y2);
		}
		else if(x0<x1&&y0>=y1&&y0<=y2&&z0>=z1&&z0<=z2)
		{
			res=(x0-x1)*(x0-x1);
		}
		else if(x0>x2&&y0>=y1&&y0<=y2&&z0>=z1&&z0<=z2)
		{
			res=(x0-x2)*(x0-x2);
		}
		else if(x0>=x1&&x0<=x2&&y0>=y1&&y0<=y2&&z0<z1)
		{
			res=(z0-z1)*(z0-z1);
		}
		else if(x0>=x1&&x0<=x2&&y0>=y1&&y0<=y2&&z0>z2)
		{
			res=(z0-z2)*(z0-z2);
		}
		else if(x0<x1&&y0<y1&&z0>=z1&&z0<=z2)
		{
			res=(x0-x1)*(x0-x1)+(y0-y1)*(y0-y1);
		}
		else if(x0<x1&&y0>y2&&z0>=z1&&z0<=z2)
		{
			res=(x0-x1)*(x0-x1)+(y0-y2)*(y0-y2);
		}
		else if(x0>x2&&y0<y1&&z0>=z1&&z0<=z2)
		{
			res=(x0-x2)*(x0-x2)+(y0-y1)*(y0-y1);
		}
		else if(x0>x2&&y0>y2&&z0>=z1&&z0<=z2)
		{
			res=(x0-x2)*(x0-x2)+(y0-y2)*(y0-y2);
		}
		else if(x0<x1&&z0<z1&&y0>=y1&&y0<=y2)
		{
			res=(x0-x1)*(x0-x1)+(z0-z1)*(z0-z1);
		}
		else if(x0<x1&&z0>z2&&y0>=y1&&y0<=y2)
		{
			res=(x0-x1)*(x0-x1)+(z0-z2)*(z0-z2);
		}
		else if(x0>x2&&z0<z1&&y0>=y1&&y0<=y2)
		{
			res=(x0-x2)*(x0-x2)+(z0-z1)*(z0-z1);
		}
		else if(x0>x2&&z0>z2&&y0>=y1&&y0<=y2)
		{
			res=(x0-x2)*(x0-x2)+(z0-z2)*(z0-z2);
		}
		else if(y0<y1&&z0<z1&&x0>=x1&&x0<=x2)
		{
			res=(y0-y1)*(y0-y1)+(z0-z1)*(z0-z1);
		}
		else if(y0<y1&&z0>z2&&x0>=x1&&x0<=x2)
		{
			res=(y0-y1)*(y0-y1)+(z0-z2)*(z0-z2);
		}
		else if(y0>y2&&z0<z1&&x0>=x1&&x0<=x2)
		{
			res=(y0-y2)*(y0-y2)+(z0-z1)*(z0-z1);
		}
		else if(y0>y2&&z0>z2&&x0>=x1&&x0<=x2)
		{
			res=(y0-y2)*(y0-y2)+(z0-z2)*(z0-z2);
		}
		
		else if(x0<x1&&y0<y1&&z0<z1)
		{
			res=(x0-x1)*(x0-x1)+(y0-y1)*(y0-y1)+(z0-z1)*(z0-z1);
		}
		else if(x0<x1&&y0<y1&&z0>z2)
		{
			res=(x0-x1)*(x0-x1)+(y0-y1)*(y0-y1)+(z0-z2)*(z0-z2);
		}
		else if(x0<x1&&y0>y2&&z0<z1)
		{
			res=(x0-x1)*(x0-x1)+(y0-y2)*(y0-y2)+(z0-z1)*(z0-z1);
		}
		else if(x0<x1&&y0>y2&&z0>z2)
		{
			res=(x0-x1)*(x0-x1)+(y0-y2)*(y0-y2)+(z0-z2)*(z0-z2);
		}
		else if(x0>x2&&y0<y1&&z0<z1)
		{
			res=(x0-x2)*(x0-x2)+(y0-y1)*(y0-y1)+(z0-z1)*(z0-z1);
		}
        else if(x0>x2&&y0<y1&&z0>z2)
		{
			res=(x0-x2)*(x0-x2)+(y0-y1)*(y0-y1)+(z0-z2)*(z0-z2);
		}
		else if(x0>x2&&y0>y2&&z0<z1)
		{
			res=(x0-x2)*(x0-x2)+(y0-y2)*(y0-y2)+(z0-z1)*(z0-z1);
		}
		if(x0>x2&&y0>y2&&z0>z2)
		{
			res=(x0-x2)*(x0-x2)+(y0-y2)*(y0-y2)+(z0-z2)*(z0-z2);
		}
		printf("%lld\n",res);
	}
	return 0;
}