2403
备注:
|
1274
|
删除的内容标记成这样。 | 加入的内容标记成这样。 |
行号 1: | 行号 1: |
## page was renamed from 程序设计练习11——zju1954——Bee Maja | |
行号 6: | 行号 5: |
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. == 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 }}} == Sample Output == {{{ 0 0 0 1 -1 1 -1 0 0 -1 }}} ------ |
|
行号 62: | 行号 14: |
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; } } return 0; |
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; } } return 0; |
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) i--;
18 int level = (i-1)/2+1;
19 int offset = n - 3*(level-1)*level-2;
20 switch (offset / level) {
21 case 0:
22 cout << level-1 - offset % level<< ' ' << 1 + offset % level << endl;
23 break;
24 case 1:
25 cout << -1 - offset % level <<' ' << level << endl;
26 break;
27 case 2:
28 cout << - level << ' ' << level - 1 - offset % level << endl;
29 break;
30 case 3:
31 cout << 1 - level + offset % level << ' ' << -1 - offset % level << endl;
32 break;
33 case 4:
34 cout << 1 + offset % level << ' ' << - level << endl;
35 break;
36 case 5:
37 cout << level << ' ' << 1 - level + offset % level << endl;
38 break;
39 }
40 }
41 return 0;
42 }