?? 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 + -