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完目指していこう.