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問題以降はいつか。