東大理三生のプログラミング奮闘記

初心者プログラマーが半年間でどれだけ成長するか!についてのブログです。勉強方法とか使った本とかについて書いていくと思います!プログラミングをもっと身近に感じてもらえたら嬉しいです!毎日更新を目指します!

ABC #35 を python で解いてみた!

今日は勉強記録はお休みです!


そろそろD問題にもチャレンジしたいなあということで頑張って見ましたが、AtCoderのBegginnerコースでもかなり手こずりますね〜


数学は得意だったので、アルゴリズムを考えるのは楽しいのですが、パソコン初心者ということで、「どこまで自分で考えて」、「どこからパソコンに任せるのか」の見極めがなかなかに大変です。

問題 A:決められた比かどうか。

W, H = [int(n) for n in input().split()]

if W/H == 4/3:
    print("4:3")
elif W/H == 16/9:
    print("16:9")


問題 B:ドローン問題(要約が思いつきませんでした...)

import math
S = input()
T = int(input())

N = len(S)
p = [0, 0]
?_conter = 0
for n in range(N):
    if S[n] =  "?":
        ?_counter += 1
    if S[n] =  "L":
        p[0] -= 1
    if S[n] =  "R":
        p[0] += 1
    if S[n] =  "U":
        p[1] += 1
    if S[n] =  "D":
        p[1] -= 1

if T == 1:
    print(math.fabs(p[0]) + math.fabs(p[1]) + ?_counter)

elif T ==2:
    judge1 = math.fabs(p[0]) + math.fabs(p[1]) - ?_counter
    judge2 = math.fabs(p[0]) + math.fabs(p[1]) + ?_counter
    if judge1 >= 0:
        print(judge1)
    elif judge1 < 0 and judge2 % 2 == 0:
        print(0)
    elif judge1 < 0 and judge2 % 2 == 1:
        print(1)


A, Bは確かめをしていないので、あってるか分かりません笑


あっているかは別として、BegginerのA~Cは簡単に解けるようになりました。


普通のエンジニアさんたちには当たり前だと思いますが、成長を感じて嬉しいです〜笑

問題 C:一列オセロ、区間指定してひっくり返すのを繰り返すした後の配列を求める

# "0"は黒、"1"は白
N, Q = [int(n) for n in input().split()]
range_list = []
for i in range(Q):
    l, r = [int(n) for n in input().split()]
    range_list.append(list(range(l-1, r)))

final_seq = ""

for i in range(N):
    counter = 0
    for each_range in range_list:
        if i in each_range:
            counter += 1
    if counter % 2 == 1:
        final_seq += "1"
    elif counter % 2 == 0:
        final_seq += "0"

print(final_seq)


問題 D

高橋君が住む国には N 箇所の町と町同士をつなぐ一方通行の道が M 本あり、それぞれの町には 1 から N の番号が割りふられています。 i 番目の道は ai 番の町から bi 番の町へ移動することが可能であり、移動に ci 分だけかかります。
所持金が 0 円の高橋君は T 分間のトレジャーハントに出かけることにしました。高橋君は開始 0 分の時点で 1 番の町にいます。また、開始から T 分の時点にも 1 番の町にいなくてはなりません。高橋君が i 番の町に 1 分間滞在すると、 Ai 円が高橋君の所持金に加算されます。
T 分間のトレジャーハントによって高橋君の所持金は最大いくらになるか求めてください。


今回はこれが難関です!



まず、そもそもMをNの関数にしなくていいのかな〜なんて思ったりします。1番の町から出ても帰ってこれないかもしれないですもんね〜
まあ、そこには触れないように考えます。





と思ってしばらく考えた末、ヒントも読みましたが、なにやら難しいぞ.....


今日はひとまず諦めます。。泣