AtCoder Beginner Contest 116・118・122・123 A・B問題
前書き
AtCoder Beginner Contest 116・118・122・123 A・B問題を解きました。
B問題
- 難易度:灰
- 時間:25分
まず問題を正しく理解するのに8分ほどかかってしまったので反省。
奇数→ 3*A+1、偶数→ A / 2の計算をしながら、Aは変化します。
1度代入された値に再度代入されるに、ループを終了します。
Am = An (m > n) となった時 => 1度代入された値に再度代入される
A1 → 初期値であり、この時点で1度代入の経験があるとみなします。
import sys s=int(input()) lis=[0]*1000000 lis[s-1]=1 def kisuu(n): return 3*n+1 def guusuu(n): return int(n/2) for j in range(1,1000001): if s%2==0: s=guusuu(s) else: s=kisuu(s) lis[s-1]+=1 if lis[s-1]>1: print(j+1) sys.exit()
B問題
- 難易度:灰
- 時間:5分
N,M=map(int,input().split()) Mlis = [0]*M for i in range(N): KA = list(map(int,input().split())) K = KA[0] A = KA[1:] for a in A: Mlis[a-1]+=1 count=0 for j in Mlis: if j==N:count+=1 print(count)
A問題
- 難易度:灰
- 時間:1分
i = input() if i=='A': print('T') if i=='T': print('A') if i=='C': print('G') if i=='G': print('C')
B問題
- 難易度:灰
- 時間:8分
最初、部分文字列を定義を勘違いして4分ほどロスしてしまいました。
S=input() count,_max=0,0 for i in range(len(S)): if S[i]=='A'or S[i]=='G'or S[i]=='C'or S[i]=='T': count+=1 _max=max(count,_max) else: count=0 print(_max)
A問題
- 難易度:灰
- 時間:4分
import itertools,sys D = [int(input()) for i in range(5)] K = int(input()) _D = itertools.permutations(D, 2) for d in _D: if abs(d[0]-d[1])>K: print(':(') sys.exit() print('Yay!')
B問題
- 難易度:灰
- 時間:7分
注文時間の総計が最短となるメニューの注文順を解きます。
1〜4番目の順番はどうでも良いので、最後に注文するメニューは何にすべきかが本質的な問いです。
最後に注文するメニュー以外は10の位で切り上げして合計します。
最後に注文するメニューはそのまま加算します。
この結果最も注文時間の総計が小さくなる順番を答えとします。
import itertools,sys,math D = [int(input())/10 for i in range(5)] _min=10000000000 for i in range(4): count = 0 for j in range(5): count+=math.ceil(D[j])*10 count-=(math.ceil(D[i])-D[i])*10 _min=min(count,_min) print(int(_min))