結果
問題 | No.2416 vs Slime |
ユーザー |
![]() |
提出日時 | 2023-08-12 13:37:58 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 8,473 bytes |
コンパイル時間 | 2,545 ms |
コンパイル使用メモリ | 203,352 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-11-19 15:45:27 |
合計ジャッジ時間 | 3,664 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 37 |
ソースコード
/*#define _GLIBCXX_DEBUG//*/#include <bits/stdc++.h>/*#include <atcoder/all>using namespace atcoder;//*/using namespace std;#define dbl double#define ll long long#define ull unsigned long long#define ld long double#define pii pair<int,int>#define pll pair<ll,ll>#define ti3 tuple<int,int,int>#define tl3 tuple<ll,ll,ll>#define vi vector<int>#define vc vector<char>#define vl vector<ll>#define vb vector<bool>#define vs vector<string>#define vvi vector<vector<int>>#define vvc vector<vector<char>>#define vvb vector<vector<bool>>#define vvl vector<vector<ll>>#define vvvi vector<vector<vector<int>>>#define vvvc vector<vector<vector<char>>>#define vvvl vector<vector<vector<ll>>>#define vvvvi vector<vector<vector<vector<int>>>>#define vvvvc vector<vector<vector<vector<char>>>>#define vvvvl vector<vector<vector<vector<ll>>>>#define vpi vector<pii>#define vpl vector<pll>#define prq priority_queue#define prq2 priority_queue<ll,vl, greater<ll>>#define seti set<int>#define setl set<ll>#define quel queue<ll>#define pb push_back#define ps push#define ins insert#define rev reverse#define fi first#define se second#define lb lower_bound#define ub upper_bound#define all(x) x.begin(),x.end()#define forv(i,V) for(const auto& i:V)#define rep(i,n) for (ll i = 0; i < (ll)(n); i++)#define repi(i,j,n) for (ll i = (ll)(j);i < (ll)(n);i++)#define rep2(i,n) for(ll i=(ll)(n-1);i>=0ll;i--)#define repi2(i,n,j) for(ll i=(ll)(n-1);i>=(ll)(j);i--)#define faster ios::sync_with_stdio(false);std::cin.tie(nullptr);const double PI=3.14159265358979323846;vl dxs = {1, 0, -1, 0};vl dys = {0, 1, 0, -1};ll max(int a,ll b){return max((ll)a,b);}ll max(ll a,int b){return max((ll)b,a);}ll min(int a,ll b){return min((ll)a,b);}ll min(ll a,int b){return min((ll)b,a);}ll gcd(ll a,ll b){if(b==0){return a;}else{return gcd(b,a%b);}}ll lcm(ll a,ll b){return (a/gcd(a,b))*b;}ll indexlb(vl &v,ll x){auto it=lb(all(v),x);ll index=it-v.begin();return index;}ll indexub(vl &v,ll x){auto it=ub(all(v),x);ll index=it-v.begin();return index;}ll setlb(setl &s,ll x){auto it=s.lb(x); return *it;}//番目ではなく要素が返ってくるll setub(setl &s,ll x){auto it=s.ub(x); return *it;}//番目ではなく要素が返ってくるvoid setpre(double d,ll x){cout<<fixed<<setprecision(x)<<d<<endl;}void ldsetpre(ld d,ll x){cout<<fixed<<setprecision(x)<<d<<endl;}template <typename T>void output(vector<T> &A) {rep(i,A.size()){cout<<A[i];if(i!=A.size()-1){cout<<" ";}else{cout<<endl;}}}template <typename T>void cinvec(vector<T> &A){rep(i,A.size()) cin>>A[i];}template <typename T>void coutvece(vector<T> &A){for(ll i=0;i<A.size();i++) cout <<A[i]<<endl;}template <typename T>bool chmin(T &a,const T &b){if(b<a){a=b; return 1;} return 0;}template <typename T>bool chmax(T &a,const T &b){if(b>a){a=b; return 1;} return 0;}void yesno(bool i){if(i)cout<<"yes"<<endl;else cout<<"no"<<endl;}void YesNo(bool i){if(i)cout<<"Yes"<<endl;else cout<<"No"<<endl;}void YESNO(bool i){if(i)cout<<"YES"<<endl;else cout<<"NO"<<endl;}ll suretu_sum(vl a){//数列の要素の和ll n=a.size();ll res=0;rep(i,n){res+=a[i];}return res;}bool isprime(ll n){//素数判定if(n<2) return false;else if(n==2) return true;else if(n%2==0) return false;double sqrtn=sqrt(n);for(int i=3;i<=sqrtn;i+=2){if(n%i==0){return false;}}return true;}ll modinv(ll a,ll m){//mod m上でのaの逆元ll b=m,u=1,v=0;while(b){ll t=a/b;a-=t*b; swap(a,b);u-=t*v; swap(u,v);}u%=m;if(u<0) u+=m;return u;}ll modwari(ll a,ll b,ll m){//mod m上でのa/bll ans=a*modinv(b,m)%m;return ans;}ll modpow(ll a,ll n,ll mod) {ll res=1;while(n>0) {if(n&1) res=(res*a)%mod;a=a*a%mod;n>>=1;}return res;}vl factt,invv,fact_inv;void combjyunbi(ll size,ll mod){factt.resize(size+5);fact_inv.resize(size+5);invv.resize(size+5);factt[0]=factt[1]=1;fact_inv[0]=fact_inv[1]=1;invv[1]=1;repi(i,2,size+5){factt[i]=factt[i-1]*i%mod;invv[i]=mod-invv[mod%i]*(mod/i)%mod;fact_inv[i]=fact_inv[i-1]*invv[i]%mod;}}//combjyunbiしてから!!!ll combmod(ll n,ll k,ll mod){return factt[n]*(fact_inv[k]*fact_inv[n-k]%mod)%mod;}ll combmod2(ll n,ll k,ll mod){ll ans=1;repi(i,1,k+1){ans*=modwari(n-i+1,i,mod);ans%=mod;}return ans;}//nが大きく、kが小さい場合(計算量はO(k))struct edge {ll from; //辺の始点ll to; //辺の終点ll leng; //辺の重み};struct yukoedge{ll to;};using Graph =vvl;using Graph2=vector<vector<edge>>;using Graph3=vector<vector<yukoedge>>;//.pb({x})で作成vl topo_sort(const Graph3 &G){//bfs できない場合は返り値のsize≠nvl ans;ll n=G.size();vl ind(n);// ind[i]: 頂点iに入る辺の数(次数)rep(i,n){//count indexforv(e,G[i]){ind[e.to]++;}}quel que;//辞書順最小が欲しかったらprq2にするrep(i,n){//次数が0の点if(ind[i]==0){que.push(i);}}while(!que.empty()){//bfsll now=que.front();ans.pb(now);que.pop();forv(e,G[now]){ind[e.to]--;if(ind[e.to]==0) {que.push(e.to);}}}return ans;}vl sieve(ll n){//fast_soinsuの前処理 O(NloglogN)//vl min_factor=sieve(1e6)などでコピーvl min_factor(n+1);rep(i,n+1) min_factor[i] = i;for(ll i=2;i*i<=n;i++){if(min_factor[i]==i){for(ll j=2;i*j<= n;j++){if(min_factor[i*j]>i){min_factor[i*j]=i;}}}}return min_factor;}vl fast_soinsu(const vl &min_factor,ll m){//N以下の正整数すべてを素因数分解するときに有効//vl min_factor=sieve(1e6);で前計算 O(NloglogN)//vl g=soinsu(min_factor,i);でコピー//本計算の計算量は O(logN)vl ans;while(m>1){ans.pb(min_factor[m]);m/=min_factor[m];}return ans;}vector<pll> factorize(ll n){//素因数分解 {因数,乗数}vector<pll> ans;for(ll a=2;a*a<=n;a++){if(n%a!=0) continue;ll ex=0;while(n%a==0){ex++;n/=a;}ans.pb({a,ex});}if(n!=1) ans.push_back({n, 1});return ans;}vl divisor(ll n){//約数列挙(sqrt(n))vl ret;for(ll i=1;i*i<=n;i++){if(n%i==0){ret.push_back(i);if(i*i!=n) ret.push_back(n/i);}}sort(all(ret));return ret;}vector<pair<ll,char>> rle(string s){//ランレングス圧縮(数,文字)ll n=s.length();vector<pair<ll,char>> res;char pre=s[0];ll cnt=1;repi(i,1,n) {if(pre!=s[i]){res.push_back({cnt,pre});pre=s[i];cnt=1;}else cnt++;}res.push_back({cnt,pre});return res;}vl bfs(Graph G,ll s){//始点sからの距離ll n=G.size();vl dist(n,-1);quel que;dist[s]=0;que.push(s);while (!que.empty()) {ll v=que.front();que.pop();forv(nv,G[v]) {if (dist[nv]!=-1) continue;dist[nv]=dist[v]+1;que.push(nv);}}return dist;}template <typename T>vector<T> jyu_nasi(vector<T> a){//sortしてから!配列を重複なしにするa.erase(unique(all(a)),a.end());return a;}map<ll,ll> zaatu(vl &a,ll t){//O(NlogN) キーが返され、配列は圧縮済みのものになるmap<ll,ll> poi;vl copy=a;sort(all(copy));copy=jyu_nasi(copy);vl res(a.size());rep(i,a.size()){if(t==0) poi[indexlb(copy,a[i])]=a[i];//t=0ならキーは圧縮、1ならキーは元の要素else poi[a[i]]=indexlb(copy,a[i]);res[i]=indexlb(copy,a[i]);}a=res;return poi;}vl ruisekiwa(vl a){//累積和とるll n=a.size();vl res(n);res[0]=a[0];repi(i,1,n){res[i]=res[i-1]+a[i];}return res;}int main(){ll h,a;cin>>h>>a;ll ha=h;ll d=0;ll ans=1;while(ha>0){ha=ha/a;d++;ans*=2;}cout<<ans-1<<endl;}