AtCoder Beginner Contest 177 / Python


f:id:penyooo:20200112235130p:plain


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

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

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





結果



f:id:penyooo:20200829235351p:plain

ダメだ、もう3問しか解けなかったら完全に下がる。

何かムズくなかった?全体的によくわからなかった。







問題と解答と勉強


atcoder.jp

提出したコード
D, T, S= map(int, input().split())
 
if D/S <= T:
    print("Yes")
else:
    print("No")









atcoder.jp



これがね、わからんかった。

わからな過ぎて一旦 C 問題を解いてから戻ってくる程わからんかった。

提出したコード
S = input()
T = input()
 
ans = []
 
for i in range(len(S) - len(T) +1):
    count = 0
    for j, k in zip(T,S[i:i+len(T)]):
        if j == k:
            count += 1
    ans.append(count)
    
print(len(T) - max(ans))



結局何も思いつかなかったので地道に比べている。

B 問題だからそれでも通るのね。







atcoder.jp



TLEになるやつ
import itertools
 
N = input().split()
A = list(map(int, input().split()))
ans = 0
 
for i,j in itertools.combinations(A, 2):
        ans += i * j
    
print(ans % 1000000007)



言われたことをそのままやったら通らなかった。

まあ、それはそうかもね。

提出したコード
N = int(input())
A = list(map(int, input().split()))
ans = 0
s = 0
 
for n, i in enumerate(reversed(A[1:]), 1):
    s += i
    ans += A[N-n-1] * s
    
print(ans % 1000000007)



仕方ないので数学的に少し式をまとめたら通った。







atcoder.jp



これが出来なかった。

Union-Findを使うらしい。

なんか前に1回やったような記憶があるねぇ。
でも、書き方どころか、それが何だったかすら忘れてしまった。

勉強用
n,m=map(int,input().split())

a=list(range(n))
def find(x):
  g = x
  while g != a[g]: g = a[g]
  a[x] = g
  return g
 
for _ in range(m):
  x,y=map(int,input().split())
  x,y=find(x-1),find(y-1)
  if x == y: continue
  a[y]=x
 
count=[0]*n
for i in range(n):
  count[find(i)] += 1
print(max(count))









atcoder.jp



ここまで辿りつかなかったけど、解けてる人数的には出来た方が良い問題っぽい。

勉強用
import numpy as np
N = int(input())
A = list(map(int,input().split()))
cnt = [0] * (10**6 + 1)
for i in range(N):
    cnt[A[i]] += 1
 
maxcount = 0
for i in range(2,10**6+1):
    maxcount = max(maxcount,sum(cnt[i::i]))
 
if np.gcd.reduce(A) != 1:
    print('not coprime')
elif maxcount <= 1:
    print('pairwise coprime')
else:
    print('setwise coprime')



正直、勉強用って言ってるだけで、最近全然やってない。
後でやろうって思うんだけど、気が付くと1週間経ってしまっている。

今週はちゃんとやりたいところ、だ、と、思ってはいる。







atcoder.jp



これは、まあ、良いね。