1306
备注:
|
← 于2008-06-01 13:25:35修订的的版本10 ⇥
1273
|
删除的内容标记成这样。 | 加入的内容标记成这样。 |
行号 1: | 行号 1: |
Bee Maja | = Bee Maja = |
行号 3: | 行号 3: |
Time limit: 1 Seconds | http://acm.zju.edu.cn/show_problem.php?pid=1954 |
行号 5: | 行号 5: |
Memory limit: 32768K | {{{#!cplusplus /*Written by czk*/ #include <iostream> #include <algorithm> #include <string> #include <cmath> using namespace std; |
行号 7: | 行号 13: |
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. 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. == 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 |
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; } } } |
行号 37: | 行号 49: |
== Sample Output == {{{ 0 0 0 1 -1 1 -1 0 0 -1 }}} ------ |
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 }