感想
AtCoderのコンテスト初参加。結構疲れた。てかムズイ。普通に数学的な発想が求められるんだな〜。
解ければ快感、解けなければうつ病。
https://atcoder.jp/contests/sumitrust2019
以下自分の回答
A November 30
M1,D1 = gets.chomp.split.map(&:to_i)
M2,D2 = gets.chomp.split.map(&:to_i)
ret = 0
if M1 == 12
if D1 == 31
ret = 1
end
end
if M1 + 1 == M2
ret = 1
end
puts ret
D2が1かどうか判定すれば良かっただけなのに、なにしてるんだろうか。ぐぬぬ。
B Tax Rate
N = gets.to_i
X = ":("
a = N * 100 / 108
if ( N * 100 ) % 108 != 0
a += 1
end
if a * 108 / 100 == N
X = a
end
puts X
結構迷ってしまった。てか正規のやり方なのか怪しい。
Xに文字列いれた上に数値入れてグロい。Ruby凄いな。
C 100 to 105
X = gets.to_i
N = X / 100
can = 0
for i in 0..N
x = X - i * 100
if 0 <= x && x <= 5 * i
can = 1
break
end
end
puts can
特にコメントなし(実際に解いてる時は一瞬で解けた嬉しさで内心ウッキウキだった)
D Lucky PIN
N = gets.to_i
S = gets.chomp
count = 0
for i in 0..9
a = S.index(i.to_s)
if a != nil
for j in 0..9
b = S.index(j.to_s, a+1)
if b != nil
for k in 0..9
c = S.index(k.to_s, b+1)
if c != nil
count += 1
end
end
end
end
end
end
puts count
最初30000個を3重ループして時間オーバーになった(あたりまえやん)
ここまでは100分以内にできた。
E Colorful Hats 2
ここから後日解き直した。
N = gets.to_i
A = gets.split.map &:to_i
t = [ 0, 0, 0 ]
result = 1
for i in 0..N-1
if t.count( A[i] ) == 0
result = 0
break
end
result = ( result * t.count( A[i] ) ) % 1000000007
for j in 0..2
if t[j] == A[i]
t[j] += 1
break
end
end
end
puts result
これみんな簡単って言ってるのにわからなくて泣いた。
それぞれの帽子の数を保持して、その値と一致した分だけ場合分けができるという発想が無かった。
ブログラミングじゃなくても解けなかったと思う。悲しい。理系とは何だったのか。
F Interval Running
T = gets.split.map(&:to_i)
A = gets.split.map(&:to_i)
B = gets.split.map(&:to_i)
b = ( T[0] * A[0] + T[1] * A[1] ) - ( T[0] * B[0] + T[1] * B[1] )
if b == 0
puts "infinity"
else
a = T[0] * ( A[0] - B[0] )
if a * b > 0
puts 0
else
c = ( a / b ) * -2
if a % b != 0
c -= 1
end
puts c
end
end
E問題で精神がやられて変数名とか見づらいしif文もおかしいけど一応解けた。
実際のコーディングだったら絶対に修正する。
A問題では変数に1つずつ入れているのにF問題では配列にいれる謎。(表記揺れってやつになるのかな)
自分で書いといてなんだけど*-2
とかいう箇所気持ち悪すぎる。
横軸時間、縦軸距離のグラフを書くのがわかりやすかった。