情報自炊

情報を血肉にしたい

【Ruby】AtCoder Beginner Contest 130のA〜C問題振り返り

結果はA, B, CがAC。内CはWAを2回。 f:id:hoshitostar:20190616223828p:plain

間違ってAで提出しているところを見るとかなり焦っていた様子が見て取れる。Cを解くまでに43分かかっており、今回はCで大失敗したと言えるだろう。

一応D問題も取り組んでみて、方針は見えていたがプログラミングする時間が無かった…無念。

コンテストページ

atcoder.jp

提出

A

x,a = gets.chomp.split(" ").map(&:to_i)

if x < a then
  puts 0
else
  puts 10
end

B

n,x = gets.chomp.split(" ").map(&:to_i)
l_arr = gets.chomp.split(" ").map(&:to_i)

count = 1

d = 0
l_arr.each do |l|
  d = d + l
  if (d <= x) then
    count += 1
  end
end

puts count

最初のバウンドも数えるため、初期値はcount = 1であることに注意。

C

w, h, x, y = gets.chomp.split(" ").map(&:to_i)

puts w * h / 2.to_f

if x == w/2 && y == h/2 then
  puts "1"
else
  puts "0"
end

上のコードはWA。面積を出すところは合っている。問題はx == w/2 && y == h/2の比較である。これも考え方自体は正解なのだが、問題はw/2h/2の結果が整数(小数部分が切り捨てられる)であるところ。

WAが出てしまい、しばらく長方形の中心以外からも複数線が引けるのか、ノートが長方形だらけになってしまった。

正しくはこう。

w, h, x, y = gets.chomp.split(" ").map(&:to_i)

puts w * h / 2.to_f

if 2 * x == w && 2 * y == h then
  puts "1"
else
  puts "0"
end

D

一応考えだけ載せる。

  • 部分配列の左端と右端のindexをそれぞれ0として初期値を設定
  • 部分配列の左端を固定して右端のindexを右に進めていき、条件を満たすところまで進める
  • 部分配列の右端を固定して左端のindexを右に進めていき、条件を満たさなくなるところまで進める
  • これを繰り返す

たぶんこれでいけるはず…

間違えていました