はじめに
前回からレートが少しあがって、今は104です。
今回は、A~C解くことができました。
###A問題
問題
考えたこと
n == mの時だけACなので簡単なif文を書けばよい。
n, m = map(int,input().split())
if n == 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 = 0
for i in range(0,min(len(a_l),len(b_l))):
if c == len(a_l)-1:
print(int(str(b)*a))
break
if a_l[i] == b_l[i]:
c += 1
continue
if a_l[i] > b_l[i]:
print(int(str(b)*a))
break
if a_l[i] < b_l[i]:
print(int(str(a)*b))
break
###C問題
問題
考えたこと
最初は、二重ループで回していたけど明らかにTLEするだろうと思っていた。
n = int(input())
p = list(map(int,input().split()))
ans = 0
for i in range(0,n):
for j in range(0,i+1):
if p[i] > p[j]:
break
elif j == i:
ans += 1
print(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 = 0
n_min = 0
for i in range(0,n):
if i == 0:
ans += 1
n_min = p[i]
continue
if p[i] <= n_min:
ans += 1
n_min = p[i]
print(ans)
###まとめ
今回は、A~Cを解けたうれしかった。競プロに慣れてきたので今後はアルゴリズムや計算量を減らせるような実装をできるように勉強します。Dは、少し考えたけど分からなかった。サンプルにはACでるけど、TLEしたり、WAしてしまった。