POJ 2977 Box walking 长方体表面两点距离

POJ2977 小学生的考试题,暴力得出O(1)的解法

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;

int ans;
void turn(int i,int j,int x,int y,int z,int x0,int y0,int L,int W,int H)
{
 if(z==0)ans=min(ans,(x-x0)*(x-x0)+(y-y0)*(y-y0));
 	else
 		{
 		 if(i>=0&&i<2)
		  turn(i+1,j,H-z,y,x,x0+H,y0,H,W,L);
 		 if(j>=0&&j<2)
		  turn(i,j+1,x,H-z,y,x0,y0+H,L,H,W);
 		 if(i<=0&&i>-2)
		  turn(i-1,j,z,y,L-x,x0-L,y0,H,W,L);
 		 if(j<=0&&j>-2)
		  turn(i,j-1,x,z,W-y,x0,y0-W,L,H,W);
		}
}

int rect_dist(int L,int W,int H,int x1,int y1,int z1,int x2,int y2,int z2)
{
 if(z1!=0&&z1!=H)
 	if(y1==0||y1==W)
 		swap(y1,z1),swap(y2,z2),swap(W,H);
 		else
 			swap(x1,z1),swap(x2,z2),swap(L,H);
 if(z1==H)
 	z1=0,z2=H-z2;
ans=1<<30;
turn(0,0,x2,y2,z2,x1,y1,L,W,H);
return ans;
}

int main()
{//freopen("t.txt","r",stdin);
 int L,W,H,x,y,z;
 while(scanf("%d%d%d%d%d%d",&L,&W,&H,&x,&y,&z))
 	{
 	 if(L==0&&W==0&&H==0&&x==0&&y==0&&z==0)return 0;
 	 printf("%d\n",rect_dist(L,W,H,0,0,0,x,y,z));
	}
 return 0;
}

  

时间: 2024-12-14 18:49:19

POJ 2977 Box walking 长方体表面两点距离的相关文章

POJ 1986 Distance Queries LCA树上两点的距离

题目来源:POJ 1986 Distance Queries 题意:给你一颗树 q次询问 每次询问你两点之间的距离 思路:对于2点 u v dis(u,v) = dis(root,u) + dis(root,v) - 2*dis(roor,LCA(u,v)) 求最近公共祖先和dis数组 #include <cstdio> #include <cstring> #include <vector> using namespace std; const int maxn =

rwkj 1359 友元:两点距离

C++:友元1(两点之间的距离)时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte总提交:674 测试通过:457 描述 定义一个二维平面中的点(point)类,类中的数据成员为点的坐标,然后定义友元函数dist()用来计算两点之间的距离. 将下面的程序1 和程序2填写完整. 程序1 : #include <iostream>#include <iomanip>#include <cmath>using namespace std

rwkj 1284 ------nyist 101 两点距离

101 两点距离时间限制:3000 ms | 内存限制:65535 KB 难度:1描述 输入两点坐标(X1,Y1),(X2,Y2)(0<=x1,x2,y1,y2<=1000),计算并输出两点间的距离.输入第一行输入一个整数n(0<n<=1000),表示有n组测试数据;随后每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开.输出对于每组输入数据,输出一行,结果保留两位小数.样例输入20 0 0 10 1 1 0样例输出1.001.41 #include&l

HDU_5723_最小生成树+任意两点距离的期望

Abandoned country Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 3449    Accepted Submission(s): 846 Problem DescriptionAn abandoned country has n(n≤100000)villages which are numbered from 1 to

第四周(基于对象求长方体表面积和体积)

/* *copyright(c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:第四周(基于对象求长方体表面积和体积) *作者:王忠 *完成日期:2015.4.2 *版本号:v1.0 * *问题描述: 需要你定义长方柱类,代码中已经给出由5个长方柱对象构成的对象数组b: B数组中的前3个对象b[0].b[1].b[2]直接参数初始了,需要定义构造函数,而初始化中,各对象提供的参数数目不同,需要有默认参数的构造函数(未给出的参数默认为1.0) 第4个对象b[

Android 两点距离的计算方法

最近做项目需要计算用户和商家之间的距离,并要求在Listview中显示具体距离.想了一下大致思路,首先是拿到当前用户的经纬度,在拿到具体某个商家的经纬度(服务端商家的经纬度已提供),根据用户和商家的经纬度来计算当前用户和商家的实际距离.就研究了一下具体的实现方法,计算两点距离一般有两种实现方式: 一种是使用勾股定理计算: 一种是计算两点之间的球面距离: 两种计算方式我做了一下比较,当两点的距离较近时使用两种方式计算的结果基本一致,但是当两点的距离比较远时,计算的结果就会相差甚远,比较发现两点之间

圆周上两点距离-python

#!/bin/python# -*- coding: UTF-8 -*-import sys """搜狗题目,圆周上两点距离, 第一行:输入n(圆上的n个点) 第二行:输入n个点的度数s(0<=s<=360) 双精度,8位小数 输出园中距离最远的两点之间的夹角度数m(0<=m<=180),双精度,保留8位小数"""n = input()circle = []for i in range(n): doublenum = sy

js根据经纬度计算两点距离

根据两点经纬度计算距离 这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈就叫作“赤道”.在赤道的南北两边,画出许多和赤道平行的圆圈,就是“纬圈”:构成这些圆圈的线段,叫做纬线.我们把赤道定为纬度零度,向南向北各为90度,在赤道以南的叫南纬,在赤道以北的叫北纬.北极就是北纬90度,南极就是南纬90度.纬度的高低也标志着气候的冷热,如赤道和低纬度地地区无冬,两极和高

POJ 1986 Distance Queries LCA两点距离树

标题来源:POJ 1986 Distance Queries 意甲冠军:给你一棵树 q第二次查询 每次你问两个点之间的距离 思路:对于2点 u v dis(u,v) = dis(root,u) + dis(root,v) - 2*dis(roor,LCA(u,v)) 求近期公共祖先和dis数组 #include <cstdio> #include <cstring> #include <vector> using namespace std; const int max