アールグレー特売所

ゲームやら競プロやらのメモ書き

AtCoder ABC103 参戦記(A - C問題)

AtCoderを初めて2か月、6回目のコンテスト参加(内2回はSounHound Inc. Programming Contest 2018、AGC026)にして初めてABCを全完できました。嬉しい。以下今回のコンテストで提出したコードと考え方。言語はpython3です。

A問題 (Task Scheduling Problem)

A = [int(i) for i in input().split()]
print(max(A)-min(A))

昇順、もしくは降順でタスクを完了させていくとコストが最小になります。こうすると途中のタスクはキャンセルアウトされて、計算結果としては最初と最後に行ったタスクのコスト差に相当します。ソートしたり、タスクの実行順番は考えず、最小コストと最大コストの差を出力すればいいです。

 

B問題 (String Rotation)

S = input()
T = input()
N = len(S)
i = 1
Judge = "No"
while i <= N:
    if S == T:
        Judge = "Yes"
        break
    else:
        S = S[N-1]+S[:N-1]
        i += 1
print(Judge)

高々長さ100の文字列なので、愚直にループ回して、いちいちTと一致するか判定させました...

 

C問題 (Modulo Summation) 

N = int(input())
a = [int(i) for i in input().split()]
 
modTotal = 0
for i in range(N):
    modTotal += a[i]-1
print(modTotal)

f(m)を最大にするようなmは、m = (a1~aNの公倍数) - 1です。ですので、a1 ~ aNの最小公倍数を求めて、1引いて、modの総和を求めてもいいのですが...それをやるとREとなりました(python3では)。このようなmをとるとき、m mod aiはmの値にかかわらずai - 1になります。ですので、最小公倍数を求めなくても、ai - 1 の総和を求めるだけで大丈夫でした。

 

長くなるのでD問題は後編で。

earlgrey-yh.hatenablog.com