1350
备注:
|
← 于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 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. == 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; } } } |
行号 39: | 行号 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 }