AtCoder Beginner Contest 131 過去問 (A~C)
参照
A問題
2~3分。
S = list(input()) for i in range(1,4): if S[i]==S[i-1]: print('Bad') exit(0) print('Good')
B問題
10分くらい。
汚いコードでの実装はすぐに思いつきましたが、
簡潔なコードを書きたかったので、10分以上かかってしまいました。
N,L=map(int, input().split()) lis = [L+(i+1)-1 for i in range(N)] A = list(map(lambda x: abs(x), lis)) print(sum(lis)-lis[A.index(min(A))])
C問題
茶色問題。
15~20分以内に解けました。
A以上B以内の整数のうち、CでもDでも割り切れない整数の数を答える問題です。
普通にループを回したらTLEとなります。
CでもDでも割り切れない場合、
全体 - (Cで割り切れる数+Dで割り切れる数-CとDの最小公倍数で割り切れる数)をすれば良いです。
最小公倍数の出し方はこちら。
www.planeta.tokyo
ユークリッドの互除法が由来となっているアルゴリズムなので、
数値は大きくともTLEされるほどではないです。
(CとDの商と剰余を繰り返し計算する程度の計算量)
A,B,C,D=map(int, input().split()) import fractions lcm = C*D//fractions.gcd(C,D) min_ = A-1 print((B-min_)-((B//C-min_//C)+(B//D-min_//D)-(B//lcm-min_//lcm)))