PythonでABC132
こんにちは、まっちです。
今回は、PythonでABC132のA〜D問題を解きました。
A - Fifty-Fifty
4文字の文字列が、2種類の文字がそれぞれ2文字ずつ含まれるかを判定する。
対象が4文字と少ないので、全パターンを調べます。
S = str(input()) if S[0] == S[1]: if S[0] != S[2] and S[2] == S[3] : print('Yes') else: print('No') else: if (S[0] == S[2] and S[1] == S[3]) or (S[0] == S[3] and S[1] == S[2]): print('Yes') else: print('No')
B - Ordinary Number
要素数nの数列から連続する3要素を取り出した時に、真ん中の要素が2番目に大きくなるパターンを数え上げる。
3要素が単調増加/減少のパターンが該当するので、比較演算子を用いた判定を行う。
N = int(input()) P = list(map(int, input().split())) ans = 0 for i in range(N-2): if (P[i] < P[i+1] and P[i+1] < P[i+2]) or (P[i] > P[i+1] and P[i+1] > P[i+2]): ans += 1 print(ans)
C - Divide the Problems
要素数Nの数列を半分に分ける閾値Kはいくつあるかを求める。
数列をソートして、N/2の境界にある要素の差がKの数となります。
N = int(input()) D = list(map(int, input().split())) D.sort() M = int(N/2) print(D[M]-D[M-1])
D - Blue and Red Balls
K個の青玉とN-K個の赤玉がある。
青玉がi個の区画に別れるような玉の並べ方の総数をiの値ごとに求める。
回答方針は以下としました。
- 青玉をi個の区画に分ける組合せを求める。
- その青玉区画をi個の仕切りとみなし、N-K個の赤玉とi個の仕切りの組合せを求める。
- 上記の事象は独立のため、各組み合わせの積を取る。(重複組合せ)
import math def comb(n,r): if n >= r: return math.factorial(n)//(math.factorial(n-r)*math.factorial(r)) else: return 0 N, K = map(int, input().split()) for i in range(1,K+1): print(comb(K-1,i-1)*comb(N-K+1,i)%(10**9+7))
以上となります。
明日のABC133も頑張りましょう。
それでは。