0
0

More than 1 year has passed since last update.

Atcoder ABC261

Posted at

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]) + ')' )
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0