AtCoder Beginner Contest 152 / Python


f:id:penyooo:20200112235130p:plain


  • 初学者です。( 2019 / 9 ~ 現在5ヵ月目 )
  • AtCoder の問題に Python で取り組んでいます。
  • ABC で4問目(茶か緑)まで解けることを目標にしています。

完全に独学なのでコードは酷いと思います。

AtCoder やってる方、お気軽にコメントください。



例によって3問。

今回は簡単だった気がする。

3問しか解けてないが、3問めまでは20分で終わった。
勉強不足で4問めが解けないので3問めまでの時間勝負になりつつある。



結果


f:id:penyooo:20200120020701p:plain
なんとか暫定が終わる頃には茶色にはなりたいものだ。



問題と解答と勉強


atcoder.jp

提出したコード
n,m = input().split()
 
if n == m:
    print("Yes")
else:
    print("No")









atcoder.jp

提出したコード
a,b = map(int,input().split())
 
if a<=b:
    print(str(a)*b)
else:
    print(str(b)*a)










atcoder.jp

提出したコード
N = int(input())
P = list(map(int,input().split()))
 
m = P[0]
c = 1
 
for i in range(N-1):
    if P[i+1] <= m:
        m = P[i+1]
        c += 1
    
print(c)



最小値を保存しておけば、左側すべてと照合しなくても良い。

とはいえ、数が小さいので全照合でも間に合うような気がする。

3問めとしては非常に楽だ。










atcoder.jp

時間オーバーのやつ
N = int(input())
c = 0

for i in range(1,N+1):
    for j in range(1,N+1):
        
        if str(i)[0] == str(j)[-1] and str(i)[-1] == str(j)[0]:
            c += 1
            
print(c)



全照合だ。

小さい数なら行けるが20000くらいで時間が無理だ。



勉強



今回の4問めと5問めは数学的に処理してしまえば難しいコードは不要だ。いつもであれば数学で片付けようとすると上手くいかないのだが、今回はそれで良かったようだ。

問題を見てその辺の判断が付かないと、どっちの方向に考えていって良いのかわからずに苦しくなる。

数学でいけば解ける、とわかっていたならば4問めは時間内に解けたと思われる。それでも5問めは時間内には厳しかったと思うので、なかなか大変だ・・・。



終わってからやったやつ
import numpy as np
 
N = int(input())
 
A = np.zeros((10,10))
 
for i in range(1, N+1):
    
    A[int(str(i)[0])][int(str(i)[-1])] += 1 
    
count = 0
 
for i in range(1, 10):
    for j in range(1, 10):
        count += A[i][j] * A[j][i]
 
print(int(count))










atcoder.jp



終わってからやったやつ
from fractions import gcd
 
N = int(input())
A = list(map(int,input().split()))
 
t = 1
mod = 10**9 + 7
 
for i in A:
    t *= i // gcd(t,i)
 
ans = sum(t//i for i in A)
 
print(ans % mod)



こんなん時間内に思い浮かばないよねぇ。

さっと解けている人はどれだけ解法の引き出しを持っているのだろうか。

多分見た瞬間に、あぁあのパターンだ、とわかるのだろう。








atcoder.jp

6問めはスルー。ムリ-。