AtCoder Beginner Contest 172

はい。
https://atcoder.jp/contests/abc172

A - Calc

PyPy3

a=int(input())
print(a+a*a+a*a*a)

なにも工夫せずそのままで。

B - Minor Change

PyPy3

s=input()
t=input()
ans=0
for i,j in zip(s,t):
    if i!=j: ans+=1
print(ans)

zipは初めて使ったかもしれない。先頭から比較して回数を数えました。。

C - Tsundoku

PyPy3

n,m,k=map(int,input().split())
a=[int(i) for i in input().split()]
b=[int(i) for i in input().split()]
ans=chk=0
w=-1
for i in range(n):
    if k>=a[i]:
        chk+=1
        k-=a[i]
        w=i
        ans=max(ans,chk)
    else:
        break
 
for i in range(m):
    if k<b[i]:
        while w>=0:
            if k>=b[i]: break
            k+=a[w]
            chk-=1
            w-=1
    if k>=b[i]:
        chk+=1
        k-=b[i]
        ans=max(ans,chk)
    else:
        break
print(ans)

机Aの本に全力した後で少しずつ減らして机Bの本を読む。机A全力から机B全力になるまでのどこかで最大数になるはず。

D - Sum of Divisors

PyPy3

n=int(input())
#print(sum([((n//i)*(i+(n//i*i))//2) for i in range(1,n+1)]))
ans=0
for i in range(1,n+1):
    ans+=((n//i)*(i+(n//i*i))//2)
print(ans)

いまいち消化不良。

1:1  
2:2 2  
3:3   3  
4:4 4   4  
#-----  
 10 6 3 4

うまい表の書き方ができない。なんかそれぞれの約数を縦に見て等差数列の和が解に。消化不良です。
等差数列の和を求めるのに (n//i)*(i+(n//i*i))//2) (項数)×(初項+末項)÷2なのはいつかどこかで役に立つかもしれない。

E問題以降はいつか。