⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 noj 1055 长方体表面走路.txt

📁 ACM资料大集合
💻 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 + -