日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

poj2977

發布時間:2023/12/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 poj2977 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:給定一個長方體,和長方體表面上的一個點。求該點在長方體表面上移動到長方體一個(確定的)頂點的最短距離。

分析:陷阱就在于可能需要經過三個面,而不是兩個面,如果一個點在頂面,那么可能需要經過頂面、后面和左面,也可能經過頂面、右面和前面。

View Code #include <iostream>
#include
<cstdio>
#include
<cstdlib>
#include
<cstring>
using namespace std;

int main()
{
//freopen("t.txt", "r", stdin);
int lx, ly, lz, x, y, z;
while (scanf("%d%d%d%d%d%d", &lx, &ly, &lz, &x, &y, &z), lx | ly | lz | x
| y | z)
{
int ans;
if (x == 0 || y == 0 || z == 0)
{
printf(
"%d\n", x * x + y * y + z * z);
continue;
}
if (z == lz && y == ly && x == lx)
{
printf(
"%d\n", min((y + z) * (y + z) + x * x, min((x + z) * (x + z)
+ y * y, (y + x) * (y + x) + z * z)));
continue;
}
if (z == lz)
{
ans
= min((y + lz) * (y + lz) + x * x, (x + lz) * (x + lz) + y * y);
ans
= min(ans, (ly + x) * (ly + x) + (ly - y + lz) * (ly - y + lz));
ans
= min(ans, (y + lx) * (y + lx) + (lx - x + lz) * (lx - x + lz));
printf(
"%d\n", ans);
continue;
}
if (y == ly)
{
ans
= min((z + ly) * (z + ly) + x * x, (x + ly) * (x + ly) + z * z);
ans
= min(ans, (lz + x) * (lz + x) + (lz - z + y) * (lz - z + y));
ans
= min(ans, (lx + z) * (lx + z) + (lx - x + y) * (lx - x + y));
printf(
"%d\n", ans);
continue;
}
if (x == lx)
{
ans
= min((y + lx) * (y + lx) + z * z, (z + lx) * (z + lx) + y * y);
ans
= min(ans, (ly + z) * (ly + z) + (ly - y + x) * (ly - y + x));
ans
= min(ans, (lz + y) * (lz + y) + (lz - z + x) * (lz - z + x));
printf(
"%d\n", ans);
continue;
}
}
return 0;
}

總結

以上是生活随笔為你收集整理的poj2977的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。