2022-04-01から1ヶ月間の記事一覧

(備忘録)問題解決のための「アルゴリズム数学」〜 11

問題 atcoder.jp 回答 rubyに二分探索出来るメソッドが存在したので今回はそちらを使用しました。 Array#bsearch (Ruby 3.1 リファレンスマニュアル) N, X = gets.split.map(&:to_i) A = gets.split.map(&:to_i).sort result = A.bsearch{ |x| x >= X } puts…

(備忘録)問題解決のための「アルゴリズム数学」〜 10

問題 atcoder.jp 回答 これは比較的分かりやすかったですね N = gets.to_i A = gets.split.map(&:to_i) # i日目に勉強するdp1, i日目に勉強しないdp2の配列を用意する dp1 = Array.new(N+1, 0) dp2 = Array.new(N+1, 0) (0...N).each do |i| dp1[i+1] = dp2[…

(備忘録)問題解決のための「アルゴリズム数学」〜 9

問題 atcoder.jp 回答コード これも回答見ながらやりましたが、半分理解できた?くらいの感じですね # 動的計画法 部分和問題 # 配列初期化の為のメソッドを準備 def darray(n1,n2,ini=nil) Array.new(n1) { Array.new(n2) { ini } } end N, S = gets.split.…

(備忘録)問題解決のための「アルゴリズム数学」〜 8

問題 atcoder.jp 自分の回答 書籍に書いてある回答の手引き見て内容理解しててもいざ実装すると難しい。。。 これも他の方の回答見て参考にしています N,W = gets.split.map(&:to_i) # 入力を格納する配列 WN = Array.new N.times do WN << gets.split.map(&…

(備忘録)問題解決のための「アルゴリズム数学」〜 7

問題 atcoder.jp 自分の回答 書籍に手引きがあるからスムーズに答えられるけど、パッと問題だけ見たらまず分からないなこれ N = gets.to_i dp = Array.new(N) (0..N).each do |i| i <= 1 ? dp[i] = 1 : dp[i] = dp[i - 1] + dp[i - 2] end puts dp[N] その他…

(備忘録)問題解決のための「アルゴリズム数学」〜 6

問題 atcoder.jp 自分の回答 Rangeの(0...N)の部分を最初(0..N)としていたので最後のN部分(nil)が含まれていることが分からず沼りました。 また書籍見ながらなので回答の出し方はなんとなく分かるのですが、この辺りは今後自分で考えながら出せるように…

(備忘録)問題解決のための「アルゴリズム数学」〜 5

問題 atcoder.jp 自分の回答 これだと1つ1つのペアをeachするのでTLEになってしまいます。 gets cnt = 0 gets.split.map(&:to_i).combination(2).each do |i| if i.inject(:+) == 100000 cnt += 1 end end puts cnt 他の回答 gets # tally要素の数を数え上…

(備忘録)問題解決のための「アルゴリズム数学」〜 4

問題 atcoder.jp 自分の回答 injectめっちゃ使うようになった n, r = gets.split.map(&:to_i) puts n.downto((n-r)+1).inject(:*) / (1..r).inject(:*) その他の回答 combinationという便利メソッドがあるのか Array#combination (Ruby 3.1 リファレンスマニ…