📄 noj 1055 长方体表面走路.txt
字号:
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <algorithm>
using namespace std;
//NOJ 1055 长方体表面走路
/*
输入:
1 1 2 1 1 2
1 1 1 1 1 1
0 0 0 0 0 0
输出:
8
5
*/
#define MAX 99999999
long cal(long la,long lb,long lc,long a,long b,long c)
{ //当b等于lb时
int min=MAX;
//跨越两个面的情况
if(min>pow(a,2)+pow(lb+c,2))
min=pow(a,2)+pow(lb+c,2);
if(min>pow(c,2)+pow(lb+a,2))
min=pow(c,2)+pow(lb+a,2);
//跨越三个面的情况
//注意限制条件
if(lc*(lc-c+lb)<lb*(lc+a)&&min>pow(lc+a,2)+pow(lc-c+lb,2))
min=pow(lc+a,2)+pow(lc-c+lb,2);
if(la*(la-a+lb)<lb*(la+c)&&min>pow(la+c,2)+pow(la-a+lb,2))
min=pow(la+c,2)+pow(la-a+lb,2);
return min;
}
int main()
{
long la,lb,lc,a,b,c;
scanf("%ld%ld%ld%ld%ld%ld",&la,&lb,&lc,&a,&b,&c);
while(!(a==0&&b==0&&c==0&&la==0&&lb==0&&lc==0))
{
if(a==0||b==0||c==0) cout<<a*a+b*b+c*c<<endl;
else if(b==lb)
cout<<cal(la,lb,lc,a,b,c)<<endl;
else if(a==la)
cout<<cal(lc,la,lb,c,a,b)<<endl;
else if(c==lc)
cout<<cal(lb,lc,la,b,c,a)<<endl;
scanf("%ld%ld%ld%ld%ld%ld",&la,&lb,&lc,&a,&b,&c);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -