0
0

More than 3 years have passed since last update.

PythonでABC152のA~C問題を解く

Posted at

はじめに

前回からレートが少しあがって、今は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してしまった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0