# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
634272 | 2022-08-24T08:20:33 Z | antimirage | Rack (eJOI19_rack) | C++14 | 0 ms | 0 KB |
#include <iostream> #include <algorithm> #include <vector> #include <math.h> #include <set> #include <map> using namespace std; const int N = 1e6 + 5; long long n, k, ans, mod = 1e9 + 7, two[N]; main(){ cin >> n >> k; two[0] = 1; for (int i = 1; i < N; i++) { two[i] = two[i - 1] * 2 % mod; } long long pw = n; for (long long j = 0; j <= n; j++) { assert(j > 60); if (k <= (1 << j)) { if (j > 0) ans = (ans + two[pw]) % mod; else { cout << (ans + 1) % mod << endl; return 0; } k -= (1 << (j - 1)); pw = n; j = -1; } else { pw--; } } }