結果
問題 | No.973 余興 |
ユーザー |
![]() |
提出日時 | 2025-03-31 18:00:01 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 3,029 bytes |
コンパイル時間 | 379 ms |
コンパイル使用メモリ | 82,300 KB |
実行使用メモリ | 483,768 KB |
最終ジャッジ日時 | 2025-03-31 18:01:07 |
合計ジャッジ時間 | 10,807 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | -- * 2 |
other | TLE * 1 -- * 53 |
ソースコード
import sysdef main():import bisectn, X = map(int, sys.stdin.readline().split())a = list(map(int, sys.stdin.readline().split()))prefix = [0] * (n + 1)for i in range(n):prefix[i + 1] = prefix[i] + a[i]dp_a = [[False] * n for _ in range(n)]dp_b = [[False] * n for _ in range(n)]for length in range(1, n + 1):for l in range(n - length + 1):r = l + length - 1max_left = 0low, high = 1, lengthwhile low <= high:mid = (low + high) // 2if prefix[l + mid] - prefix[l] <= X:max_left = midlow = mid + 1else:high = mid - 1can_win_a = Falseif max_left > 0:for k in range(1, max_left + 1):new_l = l + knew_r = rif new_l > new_r:continueif not dp_b[new_l][new_r]:can_win_a = Truebreakif can_win_a:dp_a[l][r] = Truecontinuemax_right = 0low, high = 1, lengthwhile low <= high:mid = (low + high) // 2start = r - mid + 1if start < l:high = mid - 1continueif prefix[r + 1] - prefix[start] <= X:max_right = midlow = mid + 1else:high = mid - 1if max_right > 0:for k in range(1, max_right + 1):new_l = lnew_r = r - kif new_l > new_r:continueif not dp_b[new_l][new_r]:can_win_a = Truebreakdp_a[l][r] = can_win_amax_left_b = max_leftmax_right_b = max_rightcan_win_b = Falseif max_left_b > 0:for k in range(1, max_left_b + 1):new_l = l + knew_r = rif new_l > new_r:continueif not dp_a[new_l][new_r]:can_win_b = Truebreakif can_win_b:dp_b[l][r] = Truecontinueif max_right_b > 0:for k in range(1, max_right_b + 1):new_l = lnew_r = r - kif new_l > new_r:continueif not dp_a[new_l][new_r]:can_win_b = Truebreakdp_b[l][r] = can_win_bif dp_a[0][n - 1]:print("A")else:print("B")if __name__ == "__main__":main()