fork download
  1. /* VNIMANIYE! Etot fail rashiryet prototipy. Zapreshaetsa ispolzovat sovmestno
  2. s drugimi failami. */
  3.  
  4. process.stdin.resume();
  5. process.stdin.setEncoding('utf8');
  6.  
  7. Array.prototype.$ = function (f) { return f(this) }
  8.  
  9. Array.prototype.sort1 = function (f) { this.sort(f); return this }
  10.  
  11. function etoKusochekBaytika(kus) { return kus.length !== 0 && kus.replace(/0|1/g, '').length == 0 }
  12.  
  13.  
  14. function monetki (n, nominals) {
  15.  
  16. function monetki_recur(n, nominals) {
  17. return nominals.map(function (nom) {
  18. if (nom < n) {
  19. return monetki(n - nom, nominals).map(function (tail) {
  20. return [nom].concat(tail);
  21. })
  22. } else if (nom == n) {
  23. return [[nom]]
  24. } else {
  25. return [];
  26. }
  27. }).reduce(function (r, a) { return r.concat(a) }, [])
  28. }
  29.  
  30. function mprocess(monetki) {
  31. var dict = {}, res = [], i
  32. monetki.forEach(function (m) {
  33. m.sort(function (x,y) { return y-x})
  34. dict[m] = m
  35. })
  36. for(i in dict) {
  37. res.push(dict[i])
  38. }
  39. res.sort(function (x,y) { return y.length - x.length})
  40. return res
  41. }
  42.  
  43. return mprocess(monetki_recur(n, nominals))
  44. }
  45.  
  46.  
  47.  
  48. function sdelatBaytiki(kusochki) {
  49. var baitiki = []
  50. , kluchiki = function (slovar) {
  51. var kl=[], i; for (i in slovar) { kl.push(i) }; return kl;
  52. }
  53. , stopochki = kusochki.reduce(function (stopki, kus) {
  54. stopki[kus.length] = (stopki[kus.length] || []).concat([kus])
  55. return stopki
  56. }, {})
  57. , ostalos = function (stopki) {
  58. return kluchiki(stopki).reduce(function (x,y) { return x+stopki[y].length }, 0)
  59. }
  60. , try_match = function (stopki, schemka) {
  61. var rollback = function (baitik) {
  62. baitik.forEach(function (kus) {
  63. stopki[kus.length].push(kus)
  64. })
  65. }
  66. return schemka.reduce(function (baitik, ks) {
  67. if (baitik === null)
  68. return null
  69. if (stopki[ks] && stopki[ks].length > 0) {
  70. return [stopki[ks].pop()].concat(baitik)
  71. } else {
  72. rollback(baitik);
  73. return null;
  74. }
  75. }, [])
  76.  
  77. }
  78. , schemki = monetki(8, kluchiki(stopochki).map(Number))
  79. , schemka = schemki.pop()
  80. , baitik = null;
  81.  
  82. while (schemka && ostalos(stopochki) > 0) {
  83. while(schemka && !(baitik = try_match(stopochki, schemka))) {
  84. schemka = schemki.pop()
  85. }
  86. if (baitik !== null)
  87. baitiki.push(baitik)
  88. }
  89.  
  90. // PROVERKA
  91. if (ostalos(stopochki) == 0) {
  92. console.log('VSE HOROSHO')
  93. } else {
  94. console.log('VNIMANIYE, OSHIBKA')
  95. console.log(stopochki)
  96. console.log(monetki(8, kluchiki(stopochki).map(Number)))
  97. }
  98.  
  99. return baitiki
  100. }
  101.  
  102. function pechatatBaytik(bayt) { process.stdout.write(bayt.join(' + ') + '\n') }
  103.  
  104. function mult50(arr) {
  105. var res = []
  106. for (var i = 0; i < 25; ++i) res = res.concat(arr);
  107. return res;
  108. }
  109.  
  110. function count01(arr) {
  111. var zs = 0, os = 0;
  112. for (var i = 0; i < arr.length; ++i) {
  113. var s = arr[i];
  114. for (var j = 0; j < s.length; ++j) {
  115. if (s[j] == '0') ++zs;
  116. else ++os;
  117. }
  118. }
  119. return [zs, os];
  120. }
  121.  
  122. function print01(arr) {
  123. var res = count01(arr);
  124. console.log('0s: ' + res[0] + ' 1s: ' + res[1]);
  125. return arr;
  126. }
  127.  
  128. function print01arr(arr) {
  129. var res = [0, 0];
  130. for (var i = 0; i < arr.length; ++i) {
  131. var tmp = count01(arr[i]);
  132. res[0] += tmp[0];
  133. res[1] += tmp[1];
  134. }
  135. console.log('0s: ' + res[0] + ' 1s: ' + res[1]);
  136. return arr;
  137. }
  138.  
  139. function sobratBaytiki(zemlya) {
  140. zemlya
  141. .split(/\s+/)
  142. .filter(etoKusochekBaytika)
  143. .$(mult50)
  144. .$(print01)
  145. .sort1(function (x, y) { return y.length - x.length })
  146. .$(sdelatBaytiki)
  147. //.forEach(pechatatBaytik)
  148. .$(print01arr)
  149. }
  150.  
  151. var buffer = ""
  152. process.stdin.on('data', function (chunk) { return buffer+=chunk})
  153. process.stdin.on('end', function () { sobratBaytiki(buffer) })
  154.  
Success #stdin #stdout 0.09s 50352KB
stdin
011000 10101010 11011001 10000101
100000 11011000 10101010 11011000
111001 11011000 10101000 11011000
100110 11011000 10101001 00100000
011000 10100111 11011001 10000100
011001 10000011 11011000 10110001
011000 10110100 11011000 10101001
100000 11011000 10101000 11011001
000110 11011000 10101100 11011000
10100111 11011000 10101101
stdout
0s: 3925 1s: 3425
VNIMANIYE, OSHIBKA
{
  '6': [
    '011000', '100000', '111001', '100110', '011000', '011001',
    '011000', '100000', '000110', '011000', '100000', '111001',
    '100110', '011000', '011001', '011000', '100000', '000110',
    '011000', '100000', '111001', '100110', '011000', '011001',
    '011000', '100000', '000110', '011000', '100000', '111001',
    '100110', '011000', '011001', '011000', '100000', '000110',
    '011000', '100000', '111001', '100110', '011000', '011001',
    '011000', '100000', '000110', '011000', '100000', '111001',
    '100110', '011000', '011001', '011000', '100000', '000110',
    '011000', '100000', '111001', '100110', '011000', '011001',
    '011000', '100000', '000110', '011000', '100000', '111001',
    '100110', '011000', '011001', '011000', '100000', '000110',
    '011000', '100000', '111001', '100110', '011000', '011001',
    '011000', '100000', '000110', '011000', '100000', '111001',
    '100110', '011000', '011001', '011000', '100000', '000110',
    '011000', '100000', '111001', '100110', '011000', '011001',
    '011000', '100000', '000110', '011000',
    ... 125 more items
  ],
  '8': []
}
[ [ 8 ] ]
0s: 3075 1s: 2925