結果
問題 | No.1869 Doubling? |
ユーザー |
![]() |
提出日時 | 2022-03-11 21:30:05 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 18 ms / 2,000 ms |
コード長 | 3,818 bytes |
コンパイル時間 | 2,248 ms |
コンパイル使用メモリ | 203,460 KB |
最終ジャッジ日時 | 2025-01-28 08:13:30 |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 43 |
ソースコード
#include <bits/stdc++.h>using namespace std;using ll = long long;#define rep(i, n) for (int i = 0; i < n; i++)#define all(v) v.begin(), v.end()template <class T, class U>inline bool chmax(T &a, U b) {if (a < b) {a = b;return true;}return false;}template <class T, class U>inline bool chmin(T &a, U b) {if (a > b) {a = b;return true;}return false;}constexpr int INF = 1000000000;constexpr ll llINF = 3000000000000000000;constexpr int mod = 1000000007;const ll half = (mod + 1) / 2;constexpr double eps = 1e-10;vector<int> prime_list(int n) {vector<int> v(n + 1), res;for (int i = n; i >= 2; i--) {for (int j = i; j <= n; j += i) v[j] = i;}for (int i = 2; i <= n; i++) {if (v[i] == i) res.push_back(i);}return res;}vector<int> next_divisor(int n) {vector<int> v(n + 1);for (int i = n; i >= 2; i--) {for (int j = i; j <= n; j += i) v[j] = i;}return v;}ll modpow(ll a, ll b, ll m = mod) {ll res = 1;while (b) {if (b & 1) {res *= a;res %= m;}a *= a;a %= m;b >>= 1;}return res;}vector<ll> inv, fact, factinv;void init_fact(int n) {inv.resize(n + 1);fact.resize(n + 1);factinv.resize(n + 1);inv[0] = 0;inv[1] = 1;fact[0] = 1;factinv[0] = 1;for (ll i = 1; i <= n; i++) {if (i >= 2) inv[i] = mod - ((mod / i) * inv[mod % i] % mod);fact[i] = (fact[i - 1] * i) % mod;factinv[i] = factinv[i - 1] * inv[i] % mod;}}ll modinv(ll a, ll m = mod) {// gcd(a,m) must be 1ll 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 comb(int a, int b) {if (a < b || a < 0 || b < 0) return 0;return fact[a] * factinv[a - b] % mod * factinv[b] % mod;}using S = pair<int, int>;S op(S a, S b) { return max(a, b); }S e() { return S{-1, 0}; }struct dual_segtree {int sz = 1, log = 0;vector<S> lz;dual_segtree(vector<S> a) {int n = a.size();while (sz < n) {sz <<= 1;log++;}lz.assign(sz << 1, e());for (int i = 0; i < n; i++) lz[i + sz] = a[i];}void push(int k) {int b = __builtin_ctz(k);for (int d = log; d > b; d--) {lz[k >> d << 1] = op(lz[k >> d << 1], lz[k >> d]);lz[k >> d << 1 | 1] = op(lz[k >> d << 1 | 1], lz[k >> d]);lz[k >> d] = e();}}void apply(int l, int r, S x) {l += sz, r += sz;push(l);push(r);while (l < r) {if (l & 1) {lz[l] = op(lz[l], x);l++;}if (r & 1) {r--;lz[r] = op(lz[r], x);}l >>= 1, r >>= 1;}}S get(int k) {k += sz;S res = e();while (k) {res = op(res, lz[k]);k >>= 1;}return res;}};void solve() {int n, m;cin >> n >> m;vector<int> a{m};while (a.back() > 1) {if (a.back() % 2 == 0) {a.push_back(a.back() / 2);} else {a.push_back((a.back() + 1) / 2);}}if (n >= a.size()) {ll ans = 0;for (int i : a) ans += i;ans += n - a.size();cout << ans << endl;return;}ll ans = 0;rep(i, n) ans += (1 << i);cout << ans << endl;}int main() {cin.tie(0);ios::sync_with_stdio(false);/*int t;cin >> t;while (t--)*/solve();}