結果
問題 |
No.1010 折って重ねて
|
ユーザー |
![]() |
提出日時 | 2019-11-01 17:26:06 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,254 bytes |
コンパイル時間 | 1,623 ms |
コンパイル使用メモリ | 166,932 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-16 00:17:42 |
合計ジャッジ時間 | 2,824 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 43 |
ソースコード
#include<bits/stdc++.h> #define REP(i,n) for(int i=0,i##_len=(n);i<i##_len;++i) #define rep(i,a,b) for(int i=int(a);i<int(b);++i) #define All(x) (x).begin(),(x).end() using namespace std; typedef long long ll; template<typename T> T npow(T x, ll n){ T ans = 1; while(n != 0){ if(n&1) ans = ans*x; x = x*x; n = n >> 1; } return ans; } int lie(ll x,ll y,ll h){ x*=1000;y*=1000; int l=0,r=40; while(l+1<r){ int m=(l+r)/2; ll tmp=h*npow(2LL,m); bool able=false; REP(k,m+1){ ll th=tmp; ll tx=x,ty=y; REP(i,k) tx=(tx+1)/2; REP(i,m-k) ty=(ty+1)/2; int nx=k,ny=m-k; while(tx<=th||ty<=th){ if(tx<x&&4*tx>th){ tx*=2; th/=2; } else if(ty<y && 4*ty>th){ ty*=2; th/=2; }else{ break;} } if(tx>th&&ty>th){ able = true; } } if(able) l=m; else r=m; } return l; } int main(){ ll x,y,h;cin>>x>>y>>h; assert(1<=x&&x<=10000000000); assert(1<=y&&y<=10000000000); assert(1<=h&&h<=1000); cout<<lie(x,y,h)<<endl; }