結果
| 問題 | No.1286 Stone Skipping | 
| コンテスト | |
| ユーザー |  queee | 
| 提出日時 | 2020-11-13 21:34:35 | 
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) | 
| 結果 | 
                                WA
                                 
                             | 
| 実行時間 | - | 
| コード長 | 2,420 bytes | 
| コンパイル時間 | 906 ms | 
| コンパイル使用メモリ | 98,912 KB | 
| 実行使用メモリ | 6,944 KB | 
| 最終ジャッジ日時 | 2024-07-22 20:32:26 | 
| 合計ジャッジ時間 | 1,830 ms | 
| ジャッジサーバーID (参考情報) | judge1 / judge2 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 25 WA * 1 | 
ソースコード
//g++ t.cpp -o t && t < p.txt
//d>p.txt&&t<p.txt&&t2<p.txt
#include <iostream> // プログラムの耳と口
#include <vector> // 超有能配列秘書
#include <algorithm> // みんな大好きソートと二分探索
#include <queue> // きゅーちゃん、だいすき
#include <string> // to_string
#include <functional> // 関数を変数に入れる子
#include <set> // 値の取得・挿入・削除を高速に
#include <map> // setの妹 これまた優秀
#include <random> // 乱択さん
#include <ctime> // へびになりたい
#include <bitset> // へびになった シャー
#include <cassert>
// #include <atcoder/all>
// using namespace atcoder; // コンパイル重い
// g++ t.cpp -o t -I .
#define DB cerr<<"D"<<endl
using namespace std; using ll=long long; using ld=long double; const int INF=1e9; const ll LINF=1e18; const double dINF = 1e18; const ld ldINF = 1e18; const double EPS = 1e-6;
using P=pair<ll,ll>;
const ll M = 1000000007;
ll mod_pow(ll x, ll a) { ll an = 1; while(a > 0) { if (a&1) an = an * x % M; x = x * x % M; a >>= 1;} return an;}
ll mod_pow(ll x, ll a, ll m) { ll an = 1; while(a > 0) { if (a&1) an = an * x % m; x = x * x % m; a >>= 1;} return an;}
void add(ll& x, ll y) {x+=y; x%=M;}; void mul(ll& x, ll y) {x*=y; x%=M;}; template<typename T, typename U> void chmax(T& x, U y) {if (x<y) x=y;}; template<typename T, typename U> void chmin(T& x, U y) {if (x>y) x=y;} bool vaild(int x, int y, int hh, int ww){return 0<=x&&x<hh&&0<=y&&y<ww;}
ll gcd(ll a, ll b) {if (b==0) return a; else return gcd(b, a%b);}
int keta(ll a) {int res=0; while(a>0) res+=a%10, a/=10; return res;}
const int up[]={1,-1,0,0}, lf[]={0,0,1,-1};
int main() {
  ll d; cin>>d;
  ll an = LINF;
  for(ll i=1;i<=64;i++) {
    __int128 ng = 1, ok = LINF;
    while(ok - ng > 1) {
      __int128 md = (ng + ok) / 2;
      __int128 mu = md, sm = 0;
      for(ll j=0;j<i;j++) {
        sm += mu; mu /= 2;
      }
      //cout << (ll)ng << " " << (ll)ok << " " << (ll)md << endl;
      if (sm >= d) ok = md;
      else ng = md;
    }
    __int128 mp = 0, oo = ok;
    for(ll j=0;j<i;j++) {
      mp += oo; oo /= 2;
    }
    if (mp == d) an = ok;
  }
  cout<<an<<endl;
}
// ・配列の大きさok? ・priority_queueはgreater? ・debug消した?
// ・落ち着いて。提出まで4分待ってね……WJ……1/10……2/10……
// Thank you for making problems and running the contest
            
            
            
        