标签:style blog http color os io ar art
题意 : 给你一个蜂巢状图形,让你找出两个点之间的距离。
思路 : 在做这个题之前可以看一下2265,因为是一种题来着,规律就是我在2265里写的那样,然后就是求距离了,求距离的时候只需考虑两个点的坐标差值(x,y),把坐标差值分成四个项限,x>0且y>0,或x<0且y<0为abs(x+y),其他情况则是max(abs(x),abs(y))。。
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <cmath> 5 #include <cstdlib> 6 7 using namespace std ; 8 9 void val(int a,int &x,int &y) 10 { 11 int n = 0; 12 while(3 * (n-1) * n + 1 < a) 13 n++; 14 n--; 15 if(n == -1) 16 { 17 x = 0 ; 18 y = 0 ; 19 return ; 20 } 21 a -= 3*(n-1)*n+1; 22 if(a<=n) 23 { 24 x = n-a; 25 y = a; 26 } 27 else if(a>n&&a<=2*n) 28 { 29 x = n-a; 30 y = n; 31 } 32 else if(a>2*n&&a<=3*n) 33 { 34 x = -n; 35 y = 3*n-a; 36 } 37 else if(a>3*n&&a<=4*n) 38 { 39 x = a-4*n; 40 y = 3*n-a; 41 } 42 else if(a>4*n&&a<=5*n) 43 { 44 x = a-4*n; 45 y = -n; 46 } 47 else 48 { 49 x = n; 50 y = a-6*n; 51 } 52 } 53 int main() 54 { 55 int a,b ; 56 while(scanf("%d %d",&a,&b) !=EOF) 57 { 58 if(a == 0 && b == 0) break ; 59 int xa,ya,xb,yb ; 60 val(a,xa,ya) ; 61 val(b,xb,yb) ; 62 // printf("%d %d %d %d\n",xa,ya,xb,yb) ; 63 int ans = 0 ; 64 if((xa-xb)*(ya-yb) <= 0) 65 ans = max(abs(xa-xb),abs(ya-yb)) ; 66 else ans = abs(xa-xb)+abs(ya-yb) ; 67 printf("The distance between cells %d and %d is %d.\n",a,b,ans) ; 68 } 69 return 0 ; 70 }
POJ 1870 Bee Breeding(找规律),布布扣,bubuko.com
标签:style blog http color os io ar art
原文地址:http://www.cnblogs.com/luyingfeng/p/3920254.html