|
于2006-03-11 16:04:22修订的的版本1
大小: 1255
备注:
|
于2008-06-01 13:25:35修订的的版本10
大小: 1273
备注:
|
| 删除的内容标记成这样。 | 加入的内容标记成这样。 |
| 行号 1: | 行号 1: |
| Bee Maja Time limit: 1 Seconds Memory limit: 32768K |
= Bee Maja = |
| 行号 4: | 行号 3: |
| 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 Maja who often flies directly to a special honey comb has laid an advanced two dimensional grid over the whole hive. |
http://acm.zju.edu.cn/show_problem.php?pid=1954 |
| 行号 10: | 行号 5: |
| Willi's Coordinate System 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. 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. |
{{{#!cplusplus /*Written by czk*/ #include <iostream> #include <algorithm> #include <string> #include <cmath> using namespace std; |
| 行号 17: | 行号 13: |
| Output You should output the corresponding Maja coordinates to Willi's numbers, each coordinate pair on a separate line. Sample Input 1 2 3 4 5 Sample Output 0 0 0 1 -1 1 -1 0 0 -1 |
int main() { int n; while (cin >> n ) { if (n==1) { cout << "0 0" << endl; continue; } double r = sqrt((double)(4*n-5)/3); int i = floor(r); if (i%2==0) i--; int level = (i-1)/2+1; int offset = n - 3*(level-1)*level-2; switch (offset / level) { case 0: cout << level-1 - offset % level<< ' ' << 1 + offset % level << endl; break; case 1: cout << -1 - offset % level <<' ' << level << endl; break; case 2: cout << - level << ' ' << level - 1 - offset % level << endl; break; case 3: cout << 1 - level + offset % level << ' ' << -1 - offset % level << endl; break; case 4: cout << 1 + offset % level << ' ' << - level << endl; break; case 5: cout << level << ' ' << 1 - level + offset % level << endl; break; } } } }}} |
Bee Maja
http://acm.zju.edu.cn/show_problem.php?pid=1954
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) {
12 cout << "0 0" << endl;
13 continue;
14 }
15 double r = sqrt((double)(4*n-5)/3);
16 int i = floor(r);
17 if (i%2==0)
18 i--;
19 int level = (i-1)/2+1;
20 int offset = n - 3*(level-1)*level-2;
21 switch (offset / level) {
22 case 0:
23 cout << level-1 - offset % level<< ' ' << 1 + offset % level << endl;
24 break;
25 case 1:
26 cout << -1 - offset % level <<' ' << level << endl;
27 break;
28 case 2:
29 cout << - level << ' ' << level - 1 - offset % level << endl;
30 break;
31 case 3:
32 cout << 1 - level + offset % level << ' ' << -1 - offset % level << endl;
33 break;
34 case 4:
35 cout << 1 + offset % level << ' ' << - level << endl;
36 break;
37 case 5:
38 cout << level << ' ' << 1 - level + offset % level << endl;
39 break;
40 }
41 }
42 }