AtCoder Beginner Contest 128(略称ABC128)に参加しました。
ABC128
今回も安定の20分おくれで遅刻スタート。結果はABCの3完でした。
A問題
書くだけ。
B問題
ソート順の設定と、ソート後のインデックスの保持だったので、これも書くだけ。
function Main(input) { var result; const N = parseInt(input.shift()); const SP = []; for (var i = 0; i < N; i++) { SP.push({ I: i + 1, S: input[i * 2], P: parseInt(input[i * 2 + 1]) }) } SP.sort((a, b) => { var stComp = a.S.localeCompare(b.S); if (stComp == 0) { return b.P - a.P; } return stComp; }) SP.forEach(value => console.log(value.I)); } Main(require("fs").readFileSync("/dev/stdin", "utf8").trim().split(/\n|\s/));
C問題
条件結構絞ってあるので、全探索いけそうと思って取り組んだけども、バリエーション作る関数が思ったより作るの大変だった。。。
あと、毎回やってしまうところで、インデックスを1スタートとすべきところを0のままやってしまい、タイムロス。。。
function Main(input) { var result; const N = parseInt(input[0].split(/\s/)[0]); const M = parseInt(input.shift().split(/\s/)[1]); const KS = input.slice(0, M).map(value => value.split(/\s/).map(v => parseInt(v))); const P = input.slice(M)[0].split(/\s/); var count = 0; generateMap(N).forEach(SW => check(SW, KS, P) == true ? count++ : 0); console.log(count); } function generateMap(N) { var arr = []; for (var index = 0; index < Math.pow(2, N); index++) { var value = index; var insert = []; for (var i = 0; i < N; i++) { insert.push(value % 2); value = Math.floor(value / 2); } arr.push(insert); } return arr; } function check(sw, KS, P) { for (var index = 0; index < KS.length; index++) { var ks = KS[index]; var check = 0; for (var i = 1; i < ks.length; i++) { var s = ks[i] - 1; if (sw[s] == 1) check++; } if (P[index] == "1") check++; if (check % 2 > 0) return false; }; return true; } Main(require("fs").readFileSync("/dev/stdin", "utf8").trim().split(/\n/));
D問題
大体の方針は立ったので、あとは実装するだけだとなったけど、スムーズに実装ができず、時間切れ。
定番の関数をストックしておくといいのかな・・・
解答見たら、方針はあっていたのでその点はよかった。
感想
今回のコンテストでとりあえず茶色コーダーになった。
コンテストの問題も難しいけど、一番難しいのはコンテスト開催の時間にPCの前にいることだな・・・
毎度思うことだけど、コンテストで使うNodeJSのバージョンを今のv5.12からv10あたりまで上げてほしい。。。