AtCoder Beginner Contest 177 / Python
結果
ダメだ、もう3問しか解けなかったら完全に下がる。
何かムズくなかった?全体的によくわからなかった。
問題と解答と勉強
提出したコード
D, T, S= map(int, input().split()) if D/S <= T: print("Yes") else: print("No")
これがね、わからんかった。
わからな過ぎて一旦 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 問題だからそれでも通るのね。
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)
仕方ないので数学的に少し式をまとめたら通った。
これが出来なかった。
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))
ここまで辿りつかなかったけど、解けてる人数的には出来た方が良い問題っぽい。
勉強用
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週間経ってしまっている。
今週はちゃんとやりたいところ、だ、と、思ってはいる。
これは、まあ、良いね。