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).
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
; }
转载于:https://www.cnblogs.com/forever4444/archive/2009/05/14/1457039.html