/* VNIMANIYE! Etot fail rashiryet prototipy. Zapreshaetsa ispolzovat sovmestno s drugimi failami. */ process.stdin.resume(); process.stdin.setEncoding('utf8'); Array.prototype.$ = function (f) { return f(this) } Array.prototype.sort1 = function (f) { this.sort(f); return this } function etoKusochekBaytika(kus) { return kus.length !== 0 && kus.replace(/0|1/g, '').length == 0 } function monetki (n, nominals) { function monetki_recur(n, nominals) { return nominals.map(function (nom) { if (nom < n) { return monetki(n - nom, nominals).map(function (tail) { return [nom].concat(tail); }) } else if (nom == n) { return [[nom]] } else { return []; } }).reduce(function (r, a) { return r.concat(a) }, []) } function mprocess(monetki) { var dict = {}, res = [], i monetki.forEach(function (m) { m.sort(function (x,y) { return y-x}) dict[m] = m }) for(i in dict) { res.push(dict[i]) } res.sort(function (x,y) { return y.length - x.length}) return res } return mprocess(monetki_recur(n, nominals)) } function sdelatBaytiki(kusochki) { var baitiki = [] , kluchiki = function (slovar) { var kl=[], i; for (i in slovar) { kl.push(i) }; return kl; } , stopochki = kusochki.reduce(function (stopki, kus) { stopki[kus.length] = (stopki[kus.length] || []).concat([kus]) return stopki }, {}) , ostalos = function (stopki) { return kluchiki(stopki).reduce(function (x,y) { return x+stopki[y].length }, 0) } , try_match = function (stopki, schemka) { var rollback = function (baitik) { baitik.forEach(function (kus) { stopki[kus.length].push(kus) }) } return schemka.reduce(function (baitik, ks) { if (baitik === null) return null if (stopki[ks] && stopki[ks].length > 0) { return [stopki[ks].pop()].concat(baitik) } else { rollback(baitik); return null; } }, []) } , schemki = monetki(8, kluchiki(stopochki).map(Number)) , schemka = schemki.pop() , baitik = null; while (schemka && ostalos(stopochki) > 0) { while(schemka && !(baitik = try_match(stopochki, schemka))) { schemka = schemki.pop() } if (baitik !== null) baitiki.push(baitik) } // PROVERKA if (ostalos(stopochki) == 0) { console.log('VSE HOROSHO') } else { console.log('VNIMANIYE, OSHIBKA') console.log(stopochki) console.log(monetki(8, kluchiki(stopochki).map(Number))) } return baitiki } function pechatatBaytik(bayt) { process.stdout.write(bayt.join(' + ') + '\n') } function mult50(arr) { var res = [] for (var i = 0; i < 25; ++i) res = res.concat(arr); return res; } function count01(arr) { var zs = 0, os = 0; for (var i = 0; i < arr.length; ++i) { var s = arr[i]; for (var j = 0; j < s.length; ++j) { if (s[j] == '0') ++zs; else ++os; } } return [zs, os]; } function print01(arr) { var res = count01(arr); console.log('0s: ' + res[0] + ' 1s: ' + res[1]); return arr; } function print01arr(arr) { var res = [0, 0]; for (var i = 0; i < arr.length; ++i) { var tmp = count01(arr[i]); res[0] += tmp[0]; res[1] += tmp[1]; } console.log('0s: ' + res[0] + ' 1s: ' + res[1]); return arr; } function sobratBaytiki(zemlya) { zemlya .split(/\s+/) .filter(etoKusochekBaytika) .$(mult50) .$(print01) .sort1(function (x, y) { return y.length - x.length }) .$(sdelatBaytiki) //.forEach(pechatatBaytik) .$(print01arr) } var buffer = "" process.stdin.on('data', function (chunk) { return buffer+=chunk}) process.stdin.on('end', function () { sobratBaytiki(buffer) })
00000 10010 11000 11011 01111 01010 00011 10100 10100 11101 00101 01111 01100 00111 00111 00110 01110 11001 10101 11101 11111 11001 01110 10101 00100 10101 11100 00100 01001 01011 01010 10111 01011 01100 10011 00100 01110 01100 01010
0s: 2325 1s: 2550 VNIMANIYE, OSHIBKA { '5': [ '00000', '10010', '11000', '11011', '01111', '01010', '00011', '10100', '10100', '11101', '00101', '01111', '01100', '00111', '00111', '00110', '01110', '11001', '10101', '11101', '11111', '11001', '01110', '10101', '00100', '10101', '11100', '00100', '01001', '01011', '01010', '10111', '01011', '01100', '10011', '00100', '01110', '01100', '01010', '00000', '10010', '11000', '11011', '01111', '01010', '00011', '10100', '10100', '11101', '00101', '01111', '01100', '00111', '00111', '00110', '01110', '11001', '10101', '11101', '11111', '11001', '01110', '10101', '00100', '10101', '11100', '00100', '01001', '01011', '01010', '10111', '01011', '01100', '10011', '00100', '01110', '01100', '01010', '00000', '10010', '11000', '11011', '01111', '01010', '00011', '10100', '10100', '11101', '00101', '01111', '01100', '00111', '00111', '00110', '01110', '11001', '10101', '11101', '11111', '11001', ... 875 more items ] } [] 0s: 0 1s: 0