ABC261
A - Intersection
memo:
空白区切りの入力をmapをもちいて変数に代入する
a, b, c, d = map(int, input().split())
反省点:
大小関係を場合分けするだけの問題だったが時間がかかってしまった考えられる場合を丁寧に数え上げることが大切
ans.py
a, b, c, d = map(int, input().split())
if a < c:
l_1 = min(b-c, d-c)
if l_1 >= 0:
print(l_1)
else:
print(0)
elif a == c:
print(min(b-a, d-c))
else:
l_2 = min(d-a, b-a)
if l_2 >= 0:
print(l_2)
else:
print(0)
B - Tournament Result
memo:
転置行列の求め方 各要素の同じインデックスのところをとってきて行列として保存
B = []
for i in range(N):
B.append([-r[i] for r in A])
反省点:
5分ほどで実装できたので悪くないと思う
ans.py
import numpy as np
N = int(input())
A = []
for i in range(N):
l = [s for s in input()]
A.append(l)
for i in range(N):
for j in range(N):
if A[i][j] == 'W':
A[i][j] = 1
elif A[i][j] == 'L':
A[i][j] = -1
else:
A[i][j] = 0
B = []
for i in range(N):
B.append([-r[i] for r in A])
if np.allclose(A,B):
print('correct')
else:
print('incorrect')
C - NewFolder(1)
memo:
重複のあるlistでkeyとなるものを持っていて各要素の登場回数が欲しいときは
flag_dict = dict.fromkeys(flag, 0)
のようにvalueが0のdictをつくるのではなく
if s not in flag_dict:
print(s)
flag_dict[s] = 0
とすることで重複のないかつ出現数をvalueとして持つdictを得ることができる.
反省点:
最初はN個の要素をlistにいれてsetで重複を消してdictを作って比較するという方法をとっていたがこれだと時間が膨大にかかってしまったO(N**2)
計算時間も考えながらコードを書くようにしたい
ans.py
N = int(input())
flag_dict = {}
for i in range(N):
s = input()
if s not in flag_dict:
print(s)
flag_dict[s] = 0
else:
flag_dict[s] += 1
print(s + '(' + str(flag_dict[s]) + ')' )