AtCoder
A - Frog 1
B - バウムテスト
B - 埋め立て
A: 深さ優先探索 - AtCoder Typical Contest 001 | AtCoder
C - Anti-Division
C - Exception Handling
A - Fifty-Fifty
A - Dodecagon
C++の基本的なところ、本読むより実際に書いた方が覚えられそうなので練習する。 A - Harmony
D - Enough Array 「いちばん愚直にやるとO(n**3), 累積和つかってもO(n**2)だな」まで考えたところで詰まったので解説みた。 しゃくとり法の存在はなんとなく知っていたが、そうかこういう場合に使うと一気にO(n)にできるんだ。 しゃくとり法のアイデアだけ…
atcoder.jp 「各要素を除いたときの最大公約数をそれぞれ求めて、その最大値を返せばよい」ということには気づけた。 gcdの計算では結合則が成立するので、両端から順に最大公約数を算出し、配列としてメモっておく方法を発想できたかった。 降順のイテレー…
atcoder.jp 結果 一発AC 学んだこと 二次元配列の初期化はmapをつかうこと。Array.new(3, Array.new(3, 0))とかだと各要素を同一のオブジェクトとみなしてしまい値が連動してしまう。) 最初に書いたコード c = [] 3.times{c << gets.split().map(&:to_i)} d…
atcoder.jp 結果 一発AC 学んだこと %w(hoge)はカッコ内を展開しない。%W(hoge)はカッコ内を展開する。 string[x,x]とか文字列操作に慣れよう 三項演算子に慣れよう breakはループを1つ抜ける、returnは実行中の関数から抜ける なるほど!重複がないというこ…
atcoder.jp 結果 一発AC 学んだこと integer#timesをrange#eachと混同しないこと。 公式リファレンスちょっと慣れた。 min(x, y)ではなく[x, y].min string#charsで文字列の1文字ずつを要素とする配列にできる。 enum#each_consで1つずつずらして123,234,345…
学んだこと 最小公倍数を求めるのにユークリッドの互除法を1行で実装。後置のwhile便利だなあ。 inject便利だなあ。引数を指定しないと、最初のブロック引数にはarray[0]とarray[1]をとるのか。 てかinteger#gcdあんのかい!調べる力不足… 他人の解答を見ず…
学んだこと 解説を見ずに再帰を発想できたかった。 メソッド定義の外側で宣言したローカル変数はメソッド定義内でつかえないみたい。大文字から始めて定数にするか、@をつけてインスタンス変数にすればメソッド定義内でつかえる。(どちらがいいのだろうか。…
学んだこと バッククォートでシェルコマンドを実行できる ddは一般的にはファイルコピーにつかうが、入力元/出力先を省略すると標準入出力になる str[/regex/]で正規表現にマッチする部分文字列をとりだせる 三項演算子に慣れよう 最初に書いたコード a,b = …
学んだこと 置換はtr 最初に書いたコード n = gets.chomp.split("") m = [] n.each do |c| if c == "1" m << "9" else m << "1" end end p m.join.to_i 修正したコード puts gets.tr('19','91')
いままでPythonで書いてたけど今後RubyつかうことになりそうなのでRubyで書いてみた。 学んだこと Rubyでの標準入出力のしかた 配列から奇数/偶数番目の要素だけ取り出したいなら、select.with_index 配列で値の出現回数をハッシュに記録するなら、inject ha…