結果
| 問題 |
No.2746 Bicolor Pyramid
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-04-13 15:17:00 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 8 ms / 2,000 ms |
| コード長 | 848 bytes |
| コンパイル時間 | 2,172 ms |
| コンパイル使用メモリ | 195,912 KB |
| 最終ジャッジ日時 | 2025-02-21 01:04:46 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 36 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
using ull = unsigned long long;
constexpr int X=85344,sqrtX=292;
ull solve(ull v){
ull ng=1817123,ans=0;
while(ng-ans>1){
ull mid=(ans+ng)/2;
if(mid*(mid+1)*(2*mid+1)/6<=v)ans=mid;
else ng=mid;
}
return ans;
}
int main(){
ull B,W;
cin>>B>>W;
if(B>W)swap(B,W);
ull ans=0;
if(B>X){
ans=solve(B+W);
}else{
vector dp0(B+1,false),dp1(B+1,false);
dp0[B]=true;
ull Q=B,S=0;
for(int i=1;i<=sqrtX;i++){
fill(dp1.begin(),dp1.end(),false);
ull t=i*i;
S+=t;
for(ull j=0;j<=B;j++){
if(dp0[j]){
Q=min(Q,j);
if(j>=t){
dp1[j-t]=true;
}
if(S-(B-j)<=W){
dp1[j]=true;
}
}
}
swap(dp0,dp1);
}
ans=solve(B+W-Q);
}
cout<<ans<<'\n';
}