zoj 2818 Prairie dogs IV

2818.   Prairie dogs IV
Time Limit: 10.0 Seconds    Memory Limit: 65536K
Total Runs: 205    Accepted Runs: 131



Oh, my God! The lovely prairie dogs come again! We know they are very naughty and always play some funny games. This time, they play a game named Spiral Queue.

Each of the prairie dogs has a number and they stand in a funny queue named Spiral Queue like in Figure 1.

Given the coordinate, the direction of x-axis and y-axis is indicated in Figure 2. We suppose the coordinate of 1 is (0,0), then the coordinate of 2 is (1,0), the coordinate of 3 is (1,1) and the coordinate of 7 is (-1,-1).

zoj 2818 Prairie dogs IV

21   22  ...

20   7   8   9  10

19   6   1   2  11

18   5   4   3  12

17  16  15  14  13

Figure1

Find out the laws of the Spiral Queue.

Your task is here: Given x and y (-1000 ≤ x,y ≤ 1000), the coordinate of a prairie dog, try to find out the number of the prairie dog.

Input

Each line of input will have two numbers x and y, indicating the coordinate of a prairie dog. The input stops when EOF (end of file) is reached.

Output

You must output the number of the prairie dog based on the coordinate (x,y), followed by a newline.

Sample Input

0 0

-1 -1

1 0

1 1

100 100

1000 -1000

Sample Output

1

7

2

3

39801

4004001

Problem Setter: chhot@TJURocket

Source: TJU Programming Contest 2007


Submit   List    Runs   Forum   Statistics

#include  < iostream >
#include 
< string >
#include 
< cmath >
#define  MAX 11
using   namespace  std;
int  n;
string  ch[MAX];
int  main()
{
    
int  i,j;
    ch[
0 ] = " @ " ;
    ch[
1 ] = " @ @ " ;
    ch[
2 ] = " @ @   @ @ " ;
    ch[
3 ] = " @ @   @ @         @ @   @ @ " ;
    
string  str;
    
for (i = 4 ;i <= 10 ;i ++ )
    {
        str
= "" ;
        
for (j = 0 ;j < ( int )(pow( 3.0 ,i - 1 ));j ++ )
            str
+= "   " ;
        ch[i]
= ch[i - 1 ] + str;
        ch[i]
+= ch[i - 1 ];
    }
    
while (scanf( " %d " , & n) != EOF)
    {
        cout
<< ch[n] << endl;
    }
    
return   0 ;
}

你可能感兴趣的:(AIR)