結果
| 問題 | No.2142 Segment Zero |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-01-22 02:49:30 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 352 ms / 2,000 ms |
| コード長 | 1,361 bytes |
| コンパイル時間 | 269 ms |
| コンパイル使用メモリ | 82,580 KB |
| 実行使用メモリ | 75,560 KB |
| 最終ジャッジ日時 | 2024-09-28 06:19:00 |
| 合計ジャッジ時間 | 5,278 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 35 |
ソースコード
## https://yukicoder.me/problems/no/2142
def main():
N, K = map(int, input().split())
# 三角数をベースにやる方針
upper_n = -1
for n in range(1, N + 1):
ans = (n * (n + 1)) // 2
if ans >= K:
upper_n = n
break
answer1 = 0
if upper_n < N:
answer1 += 1
if ans > K:
answer1 += 1
# 真ん中の数を切り取る方針
answer2 = -1
for n in reversed(range(2, N + 1)):
base = (N * (N + 1)) // 2
base -= ((n - 1) * n) // 2
if K < base:
break
elif K == base:
answer2 = 1
break
low = 1
high = n - 1
while high - low > 1:
mid = (low + high) // 2
value = (mid * (mid + 1)) // 2
if value == K - base:
answer2 = 1
break
elif value < K - base:
low = mid
else:
high = mid
value = (low * (low + 1)) // 2
if value == K - base:
answer2 = 1
break
value = (high * (high + 1)) // 2
if value == K - base:
answer2 = 1
break
if answer2 == -1:
print(answer1)
else:
print(min(answer2, answer1))
if __name__ == "__main__":
main()