ABC172 復習

C問題が解けず・・。

A - Calc

こちらは問題文の通りに実装すればよいですね。

a = int(input())

print(a + a ** 2 + a ** 3)

B - Minor Change

問題を言い換えると、文字列SとTについて、異なる文字はいくつあるかということですね。
制約上、SとTは同じ長さなので、1文字目から順に同じ文字かどうかを見ていくことで答えが定まります。

s = input()
t = input()

ans = 0
for i in range(len(s)):
    if s[i] != t[i]:
        ans += 1

print(ans)

C - Tsundoku

解説ACです・・。
結局のところ、Aの机から何冊読めるか?とBの机から何冊読めるか?を求める問題になります。
そこで、Aの机から読んだ本の合計読書時間を配列aに持たせます。(Bも同様)
(a[0] = 0, a[1] = Aの机から1冊読んだ時間,a[2] = Aの机から2冊読んだ時間・・。)
次に、Aから0冊読んだ時にBから何冊まで読めるか?、Aから1冊読んだ時にBから何冊読めるか?をAからN冊読んだ場合まで順に求めていき、それぞれの机から読むことのできた最大件数(i + j)が答えになります。

N, M, K, = map(int,input().split())
A = list(map(int, input().split()))
B = list(map(int, input().split()))

a, b = [0], [0]
for i in range(N):
    # Aの机から0冊読んだ時の時間がa[0]、1冊読んだ時の時間がa[1]・・となるような配列
    a.append(a[i] + A[i])
for i in range(M):
    b.append(b[i] + B[i])

ans = 0
j = M
# Aの机からi冊(0~N)読んだ時に、Bの机からj冊読めるか
for i in range(N + 1):
    if a[i] > K:
        break
    while b[j] > K - a[i]:
        j -= 1
    ans = max(ans, i + j)

print(ans)