fork download
  1. #include <cstdlib>
  2. #include <iomanip>
  3. #include <iostream>
  4. #include <queue>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. struct Pt {
  10. int x, y, d;
  11. Pt(int x, int y) : x(x), y(y), d(x*x + y*y) {}
  12. bool operator<(const Pt& p) const { return d > p.d; }
  13. };
  14.  
  15. int main(int argc, const char** argv) {
  16. // Input
  17. int r = 0;
  18. if (argc > 1) r = atoi(argv[1]);
  19. if (!r) r = 20;
  20.  
  21. // Computation
  22. vector< vector<int> > img(r + 1);
  23. priority_queue<Pt> q;
  24. q.push(Pt(0, 0));
  25. int d, level = -1;
  26. while ((d = q.top().d) <= r*r) {
  27. cout << "l=" << setw(2) << ++level << ", d=" << setw(3) << d << ":";
  28. do {
  29. Pt p = q.top();
  30. img[p.x].push_back(level);
  31. q.pop();
  32. cout << " (" << setw(2) << p.x << "," << setw(2) << p.y << ")";
  33. if (p.y < p.x) q.push(Pt(p.x, p.y + 1));
  34. if (p.y == 0) q.push(Pt(p.x + 1, 0));
  35. } while (q.top().d == d);
  36. cout << '\n';
  37. }
  38.  
  39. // Output
  40. int w = 1;
  41. while (level > 10) {
  42. ++w;
  43. level /= 10;
  44. }
  45. for (int x = 0; x <= r; ++x) {
  46. for (int y = 0; y < img[x].size(); ++y)
  47. cout << setw(w) << img[x][y] << ' ';
  48. if (r < 20 && img[x].size() == x + 1) // draw 1/4 disk, not 1/8
  49. for (int y = x + 1; y <= r && x < img[y].size(); ++y)
  50. cout << setw(w) << img[y][x] << ' ';
  51. cout << '\n';
  52. }
  53. return 0;
  54. }
  55.  
Success #stdin #stdout 0s 3416KB
stdin
Standard input is empty
stdout
l= 0, d=  0: ( 0, 0)
l= 1, d=  1: ( 1, 0)
l= 2, d=  2: ( 1, 1)
l= 3, d=  4: ( 2, 0)
l= 4, d=  5: ( 2, 1)
l= 5, d=  8: ( 2, 2)
l= 6, d=  9: ( 3, 0)
l= 7, d= 10: ( 3, 1)
l= 8, d= 13: ( 3, 2)
l= 9, d= 16: ( 4, 0)
l=10, d= 17: ( 4, 1)
l=11, d= 18: ( 3, 3)
l=12, d= 20: ( 4, 2)
l=13, d= 25: ( 5, 0) ( 4, 3)
l=14, d= 26: ( 5, 1)
l=15, d= 29: ( 5, 2)
l=16, d= 32: ( 4, 4)
l=17, d= 34: ( 5, 3)
l=18, d= 36: ( 6, 0)
l=19, d= 37: ( 6, 1)
l=20, d= 40: ( 6, 2)
l=21, d= 41: ( 5, 4)
l=22, d= 45: ( 6, 3)
l=23, d= 49: ( 7, 0)
l=24, d= 50: ( 5, 5) ( 7, 1)
l=25, d= 52: ( 6, 4)
l=26, d= 53: ( 7, 2)
l=27, d= 58: ( 7, 3)
l=28, d= 61: ( 6, 5)
l=29, d= 64: ( 8, 0)
l=30, d= 65: ( 7, 4) ( 8, 1)
l=31, d= 68: ( 8, 2)
l=32, d= 72: ( 6, 6)
l=33, d= 73: ( 8, 3)
l=34, d= 74: ( 7, 5)
l=35, d= 80: ( 8, 4)
l=36, d= 81: ( 9, 0)
l=37, d= 82: ( 9, 1)
l=38, d= 85: ( 7, 6) ( 9, 2)
l=39, d= 89: ( 8, 5)
l=40, d= 90: ( 9, 3)
l=41, d= 97: ( 9, 4)
l=42, d= 98: ( 7, 7)
l=43, d=100: (10, 0) ( 8, 6)
l=44, d=101: (10, 1)
l=45, d=104: (10, 2)
l=46, d=106: ( 9, 5)
l=47, d=109: (10, 3)
l=48, d=113: ( 8, 7)
l=49, d=116: (10, 4)
l=50, d=117: ( 9, 6)
l=51, d=121: (11, 0)
l=52, d=122: (11, 1)
l=53, d=125: (10, 5) (11, 2)
l=54, d=128: ( 8, 8)
l=55, d=130: ( 9, 7) (11, 3)
l=56, d=136: (10, 6)
l=57, d=137: (11, 4)
l=58, d=144: (12, 0)
l=59, d=145: ( 9, 8) (12, 1)
l=60, d=146: (11, 5)
l=61, d=148: (12, 2)
l=62, d=149: (10, 7)
l=63, d=153: (12, 3)
l=64, d=157: (11, 6)
l=65, d=160: (12, 4)
l=66, d=162: ( 9, 9)
l=67, d=164: (10, 8)
l=68, d=169: (13, 0) (12, 5)
l=69, d=170: (11, 7) (13, 1)
l=70, d=173: (13, 2)
l=71, d=178: (13, 3)
l=72, d=180: (12, 6)
l=73, d=181: (10, 9)
l=74, d=185: (11, 8) (13, 4)
l=75, d=193: (12, 7)
l=76, d=194: (13, 5)
l=77, d=196: (14, 0)
l=78, d=197: (14, 1)
l=79, d=200: (10,10) (14, 2)
l=80, d=202: (11, 9)
l=81, d=205: (13, 6) (14, 3)
l=82, d=208: (12, 8)
l=83, d=212: (14, 4)
l=84, d=218: (13, 7)
l=85, d=221: (11,10) (14, 5)
l=86, d=225: (15, 0) (12, 9)
l=87, d=226: (15, 1)
l=88, d=229: (15, 2)
l=89, d=232: (14, 6)
l=90, d=233: (13, 8)
l=91, d=234: (15, 3)
l=92, d=241: (15, 4)
l=93, d=242: (11,11)
l=94, d=244: (12,10)
l=95, d=245: (14, 7)
l=96, d=250: (13, 9) (15, 5)
l=97, d=256: (16, 0)
l=98, d=257: (16, 1)
l=99, d=260: (14, 8) (16, 2)
l=100, d=261: (15, 6)
l=101, d=265: (16, 3) (12,11)
l=102, d=269: (13,10)
l=103, d=272: (16, 4)
l=104, d=274: (15, 7)
l=105, d=277: (14, 9)
l=106, d=281: (16, 5)
l=107, d=288: (12,12)
l=108, d=289: (15, 8) (17, 0)
l=109, d=290: (13,11) (17, 1)
l=110, d=292: (16, 6)
l=111, d=293: (17, 2)
l=112, d=296: (14,10)
l=113, d=298: (17, 3)
l=114, d=305: (16, 7) (17, 4)
l=115, d=306: (15, 9)
l=116, d=313: (13,12)
l=117, d=314: (17, 5)
l=118, d=317: (14,11)
l=119, d=320: (16, 8)
l=120, d=324: (18, 0)
l=121, d=325: (15,10) (18, 1) (17, 6)
l=122, d=328: (18, 2)
l=123, d=333: (18, 3)
l=124, d=337: (16, 9)
l=125, d=338: (17, 7) (13,13)
l=126, d=340: (18, 4) (14,12)
l=127, d=346: (15,11)
l=128, d=349: (18, 5)
l=129, d=353: (17, 8)
l=130, d=356: (16,10)
l=131, d=360: (18, 6)
l=132, d=361: (19, 0)
l=133, d=362: (19, 1)
l=134, d=365: (14,13) (19, 2)
l=135, d=369: (15,12)
l=136, d=370: (17, 9) (19, 3)
l=137, d=373: (18, 7)
l=138, d=377: (19, 4) (16,11)
l=139, d=386: (19, 5)
l=140, d=388: (18, 8)
l=141, d=389: (17,10)
l=142, d=392: (14,14)
l=143, d=394: (15,13)
l=144, d=397: (19, 6)
l=145, d=400: (16,12) (20, 0)
  0 
  1   2 
  3   4   5 
  6   7   8  11 
  9  10  12  13  16 
 13  14  15  17  21  24 
 18  19  20  22  25  28  32 
 23  24  26  27  30  34  38  42 
 29  30  31  33  35  39  43  48  54 
 36  37  38  40  41  46  50  55  59  66 
 43  44  45  47  49  53  56  62  67  73  79 
 51  52  53  55  57  60  64  69  74  80  85  93 
 58  59  61  63  65  68  72  75  82  86  94 101 107 
 68  69  70  71  74  76  81  84  90  96 102 109 116 125 
 77  78  79  81  83  85  89  95  99 105 112 118 126 134 142 
 86  87  88  91  92  96 100 104 108 115 121 127 135 143 
 97  98  99 101 103 106 110 114 119 124 130 138 145 
108 109 111 113 114 117 121 125 129 136 141 
120 121 122 123 126 128 131 137 140 
132 133 134 136 138 139 144 
145