LoginSignup
0
1

More than 5 years have passed since last update.

2回目の参戦.
クソバイト先のクソのせいで20時に終わるはずが21時まで掛かり,コンテスト参加に10分ほど遅れる.
結果は3完で,パフォが672.今回はC問題が簡単で,D問題に1時間ほど使えた.(がTLEで弾かれた・・・)

A問題

main.py
D = int(input())
if D == 25:
  print('Christmas')
elif D == 24:
  print('Christmas Eve')
elif D == 23:
  print('Christmas Eve Eve')
elif D == 22:
  print('Christmas Eve Eve Eve')

見返すとアホな実装だなーと思うが,帰ってきてノータイムで解いたので多めに見る.

B問題

main.py
N = int(input())
price = [int(input()) for _ in range(N)]
price.sort()
price[N-1] = int(price[N-1] / 2)
print(sum(price))

特に問題なし.

C問題

main.py
N, K = map(int, input().split())
h = [int(input()) for _ in range(N)]
h.sort(reverse=True)
mini = 10 ** 9

for i in range(N-K+1):
  a = h[i] - h[i+K-1]
  if a < mini:
    mini = a

print(mini)

これも特に問題なし.ここまで20分ほどで全て一発AC.

D問題

ここまで順調だったのに・・・.どうやら僕はクリスマスに見合う人間ではなかったようだ.

main.py
N, X = map(int, input().split())

def burger(number):
  if number == 0:
    return 'P'
  if number < 0:
    return 0
  ret = 'B' + burger(number-1) + 'P' + burger(number-1) + 'B'
  return ret

burger_str = burger(N)
print(burger_str[0:X].count('P'))

これはTLEで弾かれる.
この後は,「次元ハンバーガーを最後まで作る必要はあるのか」と考え,再帰中にretの文字数がxの値を超えたら,,,みたいなことをしていたらタイムオーバー.

模範解答

main.py
N, X = map(int, input().split())

a, p = [1],[1]
for i in range(N):
  a.append(a[i] * 2 + 3)
  p.append(p[i] * 2 + 1)

def f(N, X):
  if N == 0:
    return 0 if X <= 0 else 1
  elif X <= 1 + a[N-1]:
    return f(N-1, X-1)
  else:
    return p[N-1] + 1 + f(N-1, X-2-a[N-1])

print(f(N, X))

次も3完目指していこう.

0
1
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
1