2329
备注:
|
2403
|
删除的内容标记成这样。 | 加入的内容标记成这样。 |
行号 1: | 行号 1: |
## page was renamed from 程序设计练习11——zju1954——Bee Maja |
Bee Maja
http://acm.zju.edu.cn/show_problem.php?pid=1954
Time limit: 1 Seconds
Memory limit: 32768K
Maja is a bee. She lives in a bee hive with thousands of other bees. This bee hive consists of many hexagonal honey combs where the honey is stored in.
But bee Maja has a problem. Willi told her where she can meet him, but because Willi is a male drone and Maja is a female worker they have different coordinate systems.
Maja's Coordinate System
attachment:1954-1.gif
Maja who often flies directly to a special honey comb has laid an advanced two dimensional grid over the whole hive.
Willi's Coordinate System
attachment:1954-2.gif
Willi who is more lazy and often walks around just numbered the cells clockwise starting from 1 in the middle of the hive.
Help Maja to convert Willi's system to hers. Write a program which for a given honey comb number gives the coordinates in Maja's system.
1. Input
The input contains one or more integers which represent Willi's numbers. Each number stands on its own in a separate line, directly followed by a newline. The honey comb numbers are all less than 100 000.
2. Output
You should output the corresponding Maja coordinates to Willi's numbers, each coordinate pair on a separate line.
3. Sample Input
1 2 3 4 5
4. Sample Output
0 0 0 1 -1 1 -1 0 0 -1
1 /*Written by czk*/
2 #include <iostream>
3 #include <algorithm>
4 #include <string>
5 #include <cmath>
6 using namespace std;
7
8 int main() {
9 int n;
10 while(cin >> n ) {
11 if(n==1) { cout << "0 0" << endl; continue; }
12 double r = sqrt((double)(4*n-5)/3);
13 int i = floor(r);
14 if(i%2==0) i--;
15 int level = (i-1)/2+1;
16 int offset = n - 3*(level-1)*level-2;
17 switch(offset / level) {
18 case 0: cout << level-1 - offset % level<< ' ' << 1 + offset % level << endl; break;
19 case 1: cout << -1 - offset % level <<' ' << level << endl; break;
20 case 2: cout << - level << ' ' << level - 1 - offset % level << endl; break;
21 case 3: cout << 1 - level + offset % level << ' ' << -1 - offset % level << endl; break;
22 case 4: cout << 1 + offset % level << ' ' << - level << endl; break;
23 case 5: cout << level << ' ' << 1 - level + offset % level << endl; break;
24 }
25 }
26 return 0;
27 }