fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <algorithm>
  4. #include <map>
  5.  
  6. class NOS
  7. {
  8. public:
  9. NOS(const char* s="") : s(s) {}
  10. int value()const;
  11. const std::string& str()const { return s; }
  12. NOS& operator++();
  13. void expandAndReset();
  14. bool atMax()const;
  15. bool operator<(const NOS& rhs)const;
  16. private:
  17. int zeroCount()const;
  18. private:
  19. std::string s;
  20. };
  21.  
  22. int main()
  23. {
  24. int n = 500;
  25. std::map<int,NOS> results;
  26. NOS work = "0";
  27. while (results.size() != n || !work.atMax())
  28. {
  29. int val = work.value();
  30. if (val >= 1 && val <= n)
  31. {
  32. auto it = results.find(val);
  33. if (it == results.end() || work < it->second)
  34. results[val] = work;
  35. }
  36. if (work.atMax()) work.expandAndReset(); else ++work;
  37. }
  38. for (auto& p : results)
  39. std::cout << p.first << " => " << p.second.str() << "\n";
  40. }
  41.  
  42.  
  43. bool NOS::operator<(const NOS& rhs)const
  44. {
  45. if (s.size() != rhs.s.size()) return s.size() < rhs.s.size();
  46. int zeroDiff = zeroCount() - rhs.zeroCount();
  47. return zeroDiff ? zeroDiff > 0 : s < rhs.s;
  48. }
  49.  
  50. int NOS::zeroCount()const
  51. {
  52. return std::count_if(s.begin(), s.end(), [](char c){ return c=='0'; });
  53. }
  54.  
  55. bool NOS::atMax()const
  56. {
  57. return std::all_of(s.begin(), s.end(), [](char c){ return c=='2'; });
  58. }
  59.  
  60. void NOS::expandAndReset()
  61. {
  62. s = std::string(s.size()+1, '0');
  63. }
  64.  
  65. NOS& NOS::operator++()
  66. {
  67. int i = s.size() - 1;
  68. while (i >= 0) if (++s[i] > '2') s[i--] = '0'; else break;
  69. return *this;
  70. }
  71.  
  72. int NOS::value()const
  73. {
  74. int result = 0, operand = 1;
  75. for (char c : s)
  76. switch (c)
  77. {
  78. case '0': result += operand++; break;
  79. case '1': result -= operand++; break;
  80. case '2': result *= operand++; break;
  81. default: break;
  82. }
  83. return result;
  84. }
Success #stdin #stdout 0.02s 3416KB
stdin
Standard input is empty
stdout
1 => 0
2 => 02
3 => 00
4 => 100
5 => 020
6 => 000
7 => 1020
8 => 1000
9 => 002
10 => 0000
11 => 01000
12 => 1022
13 => 0020
14 => 02000
15 => 00000
16 => 1002
17 => 10220
18 => 00200
19 => 00021
20 => 0202
21 => 10020
22 => 0010000
23 => 000201
24 => 0002
25 => 02020
26 => 001020
27 => 100200
28 => 0000000
29 => 00020
30 => 01002
31 => 00221
32 => 0002100
33 => 0010200
34 => 100021
35 => 10202
36 => 0022
37 => 002210
38 => 0202000
39 => 020021
40 => 10002
41 => 00220
42 => 000102
43 => 0100200
44 => 000021
45 => 02002
46 => 100020
47 => 002200
48 => 002012
49 => 0000201
50 => 00002
51 => 020020
52 => 0020211
53 => 1000200
54 => 001002
55 => 0020120
56 => 000020
57 => 00002010
58 => 0200200
59 => 002021
60 => 10222
61 => 0010020
62 => 00220000
63 => 0000200
64 => 0020201
65 => 00202
66 => 010002
67 => 0001220
68 => 000021000
69 => 00100200
70 => 0200102
71 => 002020
72 => 102002
73 => 0100020
74 => 100221
75 => 00000211
76 => 00200121
77 => 0000102
78 => 100002
79 => 1020020
80 => 10022
81 => 1002210
82 => 000002101
83 => 0000021
84 => 020002
85 => 1000020
86 => 100220
87 => 0202211
88 => 00012102
89 => 00000201
90 => 000002
91 => 0001002
92 => 00200120
93 => 1002200
94 => 020221
95 => 1022021
96 => 00101002
97 => 0000020
98 => 0020102
99 => 0202201
100 => 02022
101 => 0020021
102 => 102202
103 => 10220210
104 => 02000012
105 => 0010002
106 => 020220
107 => 0002121
108 => 002002
109 => 1022020
110 => 100220000
111 => 01000021
112 => 0001202
113 => 0202200
114 => 000212
115 => 0020020
116 => 002002010
117 => 10220200
118 => 10200021
119 => 0100002
120 => 00022
121 => 0002120
122 => 001000200
123 => 00200200
124 => 000212100
125 => 00022001
126 => 000220
127 => 0010220
128 => 00000102
129 => 00021200
130 => 000000211
131 => 0000001200
132 => 02000021
133 => 0002200
134 => 10200020
135 => 00102200
136 => 00200012
137 => 000001020
138 => 000212000
139 => 00000021
140 => 0200002
141 => 00022000
142 => 020202101
143 => 0202021
144 => 00001002
145 => 002000120
146 => 000000201
147 => 0000002
148 => 02000020
149 => 02020201
150 => 020202
151 => 02020210
152 => 00200102
153 => 00020121
154 => 0000002001
155 => 00000020
156 => 020202001
157 => 0202020
158 => 020202010
159 => 00020211
160 => 00010002
161 => 0002012
162 => 000110002
163 => 0000100200
164 => 000000200
165 => 02020200
166 => 000202101
167 => 0002021
168 => 0020002
169 => 00020120
170 => 010022011
171 => 00222011
172 => 010022101
173 => 0100221
174 => 000202
175 => 0002102
176 => 00100002
177 => 002010020
178 => 000201200
179 => 0022201
180 => 00222
181 => 0002020
182 => 0010202
183 => 00021020
184 => 00012002
185 => 00222001
186 => 002220
187 => 0100220
188 => 010022010
189 => 1002002
190 => 00102020
191 => 102000021
192 => 01000002
193 => 0022200
194 => 002220010
195 => 01002200
196 => 002220100
197 => 10020020
198 => 000000102
199 => 001020200
200 => 10200002
201 => 00222000
202 => 00001221
203 => 1020212
204 => 010022000
205 => 0000000211
206 => 100200200
207 => 002000012
208 => 10000002
209 => 02020021
210 => 102022
211 => 10202120
212 => 1020212010
213 => 0100201211
214 => 0100220000
215 => 000000021
216 => 02000002
217 => 0202002
218 => 00001220
219 => 1020000200
220 => 102021200
221 => 100021211
222 => 002202111
223 => 010020121
224 => 00000002
225 => 02020020
226 => 0000010020
227 => 000012200
228 => 000200211
229 => 0020000211
230 => 10002121
231 => 00220211
232 => 01002012
233 => 1000221
234 => 000010002
235 => 010020211
236 => 002202011
237 => 00020021
238 => 1000212
239 => 0022021
240 => 100022
241 => 10002210
242 => 002210211
243 => 002001002
244 => 01002021
245 => 0002002
246 => 002202
247 => 1000220
248 => 00200002
249 => 000201020
250 => 100022100
251 => 00221021
252 => 0100202
253 => 0022020
254 => 002202010
255 => 10002200
256 => 00021002
257 => 002000020
258 => 002210201
259 => 0022102
260 => 01002020
261 => 00220200
262 => 000200200
263 => 0200221
264 => 00102002
265 => 02002121
266 => 0022021000
267 => 00221020
268 => 0022102010
269 => 02002201
270 => 020022
271 => 02002210
272 => 10020002
273 => 0200212
274 => 020021210
275 => 0002100200
276 => 002210200
277 => 0200220
278 => 020022010
279 => 10202021
280 => 00010212
281 => 02002120
282 => 0000221011
283 => 0010200200
284 => 0200220001
285 => 02002200
286 => 00010221
287 => 1020202
288 => 10202102
289 => 000102120
290 => 000022011
291 => 000021211
292 => 000022101
293 => 0000221
294 => 0001022
295 => 10202020
296 => 00001202
297 => 102000002
298 => 0100000020
299 => 00002201
300 => 000022
301 => 00002210
302 => 00010220
303 => 100020121
304 => 02020002
305 => 000012020
306 => 100000002
307 => 0000220
308 => 0000212
309 => 000021210
310 => 000022100
311 => 000102200
312 => 10002012
313 => 020200020
314 => 10002021
315 => 00002200
316 => 00002120
317 => 0000212010
318 => 0000220100
319 => 100021021
320 => 00220012
321 => 00220021
322 => 1000202
323 => 100020210
324 => 000000002
325 => 000021200
326 => 1022221111
327 => 000200021
328 => 10002102
329 => 0022002
330 => 10002020
331 => 1000201200
332 => 0002010021
333 => 010020102
334 => 0000000020
335 => 010020021
336 => 0020122
337 => 00220020
338 => 0022002010
339 => 100020200
340 => 020020211
341 => 0020000021
342 => 000201002
343 => 002210021
344 => 01002002
345 => 10222211
346 => 002200200
347 => 1000210200
348 => 0200202101
349 => 02002021
350 => 102222011
351 => 002000002
352 => 00221002
353 => 1022221
354 => 102222110
355 => 0002000200
356 => 020020201
357 => 0200202
358 => 020020210
359 => 10222201
360 => 102222
361 => 10222210
362 => 1022221010
363 => 0100200200
364 => 0200202001
365 => 02002020
366 => 002022111
367 => 1022220
368 => 02002102
369 => 001020002
370 => 00100221
371 => 0022100200
372 => 0020221011
373 => 0000201211
374 => 020020200
375 => 00202211
376 => 00100212
377 => 001002201
378 => 0010022
379 => 001002210
380 => 002022011
381 => 0000202011
382 => 002022101
383 => 0020221
384 => 00002021
385 => 001002120
386 => 00100220
387 => 000021012
388 => 1002000020
389 => 00202201
390 => 002022
391 => 00202210
392 => 0000202
393 => 000020210
394 => 0020221100
395 => 001002200
396 => 002022001
397 => 0020220
398 => 002022010
399 => 000021021
400 => 00002020
401 => 000020120
402 => 0020212011
403 => 000122211
404 => 0020220001
405 => 00202200
406 => 0020220010
407 => 002021121
408 => 00002102
409 => 000020200
410 => 0100000002
411 => 0000201200
412 => 00012221
413 => 0020212
414 => 002022000
415 => 100020021
416 => 00202112
417 => 000021020
418 => 00200000012
419 => 000122201
420 => 0001222
421 => 00202120
422 => 0000110221
423 => 002200021
424 => 10002002
425 => 002021120
426 => 00001200200
427 => 0000210200
428 => 00012220
429 => 0001222010
430 => 002021200
431 => 002012021
432 => 00220002
433 => 100020020
434 => 10002002010
435 => 0020211200
436 => 10002002100
437 => 000122200
438 => 00002102000
439 => 020001221
440 => 00201202
441 => 002200020
442 => 0000110220
443 => 1000200200
444 => 00220002100
445 => 010002211
446 => 1002221111
447 => 0001222000
448 => 02000122
449 => 002012020
450 => 000200002
451 => 0022000200
452 => 00201202100
453 => 0100022101
454 => 01000221
455 => 020020021
456 => 100222111
457 => 020001220
458 => 0022100021
459 => 010020002
460 => 0002000020
461 => 010002201
462 => 0100022
463 => 010002210
464 => 02002002
465 => 10022211
466 => 1002221110
467 => 0200012200
468 => 002210002
469 => 0100200020
470 => 01000220
471 => 0100022010
472 => 01000212
473 => 1002221
474 => 100222110
475 => 00202020111
476 => 0200210021
477 => 001002012
478 => 0022100020
479 => 10022201
480 => 100222
481 => 10022210
482 => 1002221010
483 => 0200200200
484 => 1002221100
485 => 0000200121
486 => 020021002
487 => 1002220
488 => 00100202
489 => 00202021
490 => 100222100
491 => 0100021200
492 => 00002002011
493 => 0020201211
494 => 1002220001
495 => 10022200
496 => 10200221
497 => 0020202
498 => 002020210
499 => 10020000021
500 => 0010200002