結果
| 問題 | No.2746 Bicolor Pyramid |
| コンテスト | |
| ユーザー |
detteiuu
|
| 提出日時 | 2026-10-03 18:14:07 |
| 言語 | PyPy3 (7.3.23 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 29 ms / 2,000 ms |
| + 112µs | |
| コード長 | 1,062 bytes |
| 記録 | |
| コンパイル時間 | 65 ms |
| コンパイル使用メモリ | 82,996 KB |
| 実行使用メモリ | 64,732 KB |
| 最終ジャッジ日時 | 2026-10-03 18:15:18 |
| 合計ジャッジ時間 | 3,172 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge4_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 36 |
ソースコード
R, B = map(int, input().split())
def knapsack(n):
a = min(n, 11)
SUM = a*(a+1)*(a*2+1)//6
SUM2 = n*(n+1)*(n*2+1)//6
dp = [False]*(SUM+1)
dp[0] = True
for i in range(1, a+1):
b = i*i
for j in reversed(range(SUM+1)):
if dp[j]:
dp[j+b] = True
if a == n:
ans = []
for i in range(SUM+1):
if not dp[i]:
ans.append(i)
return ans
L, R = [], []
for i in range(200):
if not dp[i]:
L.append(i)
R.append(SUM2-i)
return L+R[::-1]
def func(n):
SUM = n*(n+1)*(n*2+1)//6
if R+B < SUM: return False
IDX = [-1]+knapsack(n)+[SUM+1]
c = -1
for i in reversed(range(len(IDX)-1)):
l, r = IDX[i], IDX[i+1]
if l+1 < r and l+1 <= R:
c = min(r-1, R)
break
if c == -1: return False
return SUM-c <= B
left = 0
right = 10**18
while left+1 < right:
mid = (left+right)//2
if func(mid):
left = mid
else:
right = mid
print(left)
detteiuu