zoukankan      html  css  js  c++  java
  • 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
    ",rect_dist(L,W,H,0,0,0,x,y,z));
    	}
     return 0;
    }
    

      

  • 相关阅读:
    HDU-统计难题
    POJ-A Simple Problem with Integers
    HDU-I Hate It
    个人站立会议06
    个人站立会议05
    个人站立会议04
    易校小程序典型用户需求分析
    个人站立会议03
    个人第二次晚间站立总结会议
    个人站立会议02
  • 原文地址:https://www.cnblogs.com/heisenberg-/p/6746100.html
Copyright © 2011-2022 走看看