はじめに
前回からレートが少しあがって、今は104です。
今回は、A~C解くことができました。
A問題
考えたこと
n == mの時だけACなので簡単なif文を書けばよい。
n,m=map(int,input().split())ifn==m:print('Yes')else:print('No')
'Yes''No'の大文字に注意!
B問題
考えたこと
aとbの各桁の大小の比較の実装に苦労した。最終的に、intをlistに変換してindexを引き出して比較した。
for文でindexを指定して、それで大小を比較した。
a,b=map(int,input().split())a_l=list(str(a)*b)b_l=list(str(b)*a)c=0foriinrange(0,min(len(a_l),len(b_l))):ifc==len(a_l)-1:print(int(str(b)*a))breakifa_l[i]==b_l[i]:c+=1continueifa_l[i]>b_l[i]:print(int(str(b)*a))breakifa_l[i]<b_l[i]:print(int(str(a)*b))break
C問題
考えたこと
最初は、二重ループで回していたけど明らかにTLEするだろうと思っていた。
n=int(input())p=list(map(int,input().split()))ans=0foriinrange(0,n):forjinrange(0,i+1):ifp[i]>p[j]:breakelifj==i:ans+=1print(ans)
案の定TLEしたので、forを減らせるところを考えた。
$p[i]$と$p[j]$の大小関係がどうなっているか考えた。それで思ったのは、$p[i]$と$p[j]$の大小を考えた時。
$p[i]$よりも前の$p$の要素が全て$p[i]$よりも大きければよい → $p[i]$がi番目までで最小であればよい
ということが分かったので、for文を一つ減らせた。
n=int(input())p=list(map(int,input().split()))ans=0n_min=0foriinrange(0,n):ifi==0:ans+=1n_min=p[i]continueifp[i]<=n_min:ans+=1n_min=p[i]print(ans)
まとめ
今回は、A~Cを解けたうれしかった。競プロに慣れてきたので今後はアルゴリズムや計算量を減らせるような実装をできるように勉強します。Dは、少し考えたけど分からなかった。サンプルにはACでるけど、TLEしたり、WAしてしまった。