(u_u)

ABC130(A~D問題まで)

Categories: [blog]
Tags: [abc], [atcoder], [crystal]

Crystalで書きました。

A問題
x, a = gets.not_nil!.split.map(&.to_i)
if x < a
    answer = 0
else
    answer = 10
end

puts answer
B問題
n,x = read_line.split.map(&.to_i32)
l = read_line.split.map(&.to_i32)
d = [] of Int32

(n+1).to_i32.times do |i|
  if i == 0
    d << 0
  else
    d << (d[i-1] + l[i-1])
  end
end

answer_array = d.select {|num| num <= x }
print answer_array.size
C問題
w, h, x, y = read_line.split.map(&.to_i64)

if x == w / 2.0 && y == h / 2.0
  hukusuu = 1
else
  hukusuu = 0
end

puts "#{w * h / 2.0} #{hukusuu}"
D問題
n, k = read_line.split.map(&.to_i64)
a = read_line.split.map(&.to_i64)
answer = 0i64
sum = 0i64
right = 0 # 右端
n.to_i32.times do |left|
  while sum < k
    if right == n 
      # right > nになると、配列Aの要素外にアクセスすることになる。
      # ここに一致したということは、この左端固定では、右端まで足し合わせてもk以上にならなかったということ。
      # →つまり左端をこれ以上右に移動させる必要がない。
      break

    else
      sum += a
right += 1 end end if sum < k # 配列Aの右端まで足し合わせても、k以上にならなかったということ。 break end answer += n - right + 1 sum -= a
# 左端が1つ右に移動するので、合計から元の左端を削除する必要がある。 # 右端もまだ配列の最後に到達していないので、合計値を持ち越すことができる。 end puts answer