提出 #7063785
ソースコード 拡げる
#include <bits/stdc++.h> #define REP(i, n) for (int i = 0; (i) < (int)(n); ++ (i)) using namespace std; template <int32_t MOD> struct mint { int32_t value; mint() : value() {} mint(int64_t value_) : value(value_ < 0 ? value_ % MOD + MOD : value_ >= MOD ? value_ % MOD : value_) {} inline mint<MOD> operator + (mint<MOD> other) const { int32_t c = this->value + other.value; return mint<MOD>(c >= MOD ? c - MOD : c); } inline mint<MOD> & operator += (mint<MOD> other) { this->value += other.value; if (this->value >= MOD) this->value -= MOD; return *this; } }; int64_t msb(int64_t n) { if (not n) return 0; return 1ull << (63 - __builtin_clzll(n)); } constexpr int MOD = 1e9 + 7; mint<MOD> solve(int64_t l, int64_t r) { array<array<mint<MOD>, 2>, 2> cur = {}; for (int64_t i = 1ull << 62; i; i >>= 1) { array<array<mint<MOD>, 2>, 2> prv = cur; cur = {}; if (msb(l) <= i and i <= msb(r)) { cur[i == msb(l)][i == msb(r)] += 1; } REP (p, 2) REP (q, 2) REP (xy, 3) { bool x = (xy >= 2); bool y = (xy >= 1); if (p and (l & i) and not x) continue; if (q and not (r & i) and y) continue; bool np = p and ((bool)(l & i) == x); bool nq = q and ((bool)(r & i) == y); cur[np][nq] += prv[p][q]; } } mint<MOD> cnt = 0; REP (p, 2) REP (q, 2) { cnt += cur[p][q]; } return cnt; } int main() { int64_t l, r; cin >> l >> r; cout << solve(l, r).value << endl; return 0; }
提出情報
提出日時 | |
---|---|
問題 | F - Coincidence |
ユーザ | kimiyuki |
言語 | C++14 (GCC 5.4.1) |
得点 | 600 |
コード長 | 1576 Byte |
結果 | AC |
実行時間 | 1 ms |
メモリ | 256 KiB |
ジャッジ結果
セット名 | Sample | All | ||||
---|---|---|---|---|---|---|
得点 / 配点 | 0 / 0 | 600 / 600 | ||||
結果 |
|
|
セット名 | テストケース |
---|---|
Sample | a01, a02, a03 |
All | a01, a02, a03, b04, b05, b06, b07, b08, b09, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23 |
ケース名 | 結果 | 実行時間 | メモリ |
---|---|---|---|
a01 | AC | 1 ms | 256 KiB |
a02 | AC | 1 ms | 256 KiB |
a03 | AC | 1 ms | 256 KiB |
b04 | AC | 1 ms | 256 KiB |
b05 | AC | 1 ms | 256 KiB |
b06 | AC | 1 ms | 256 KiB |
b07 | AC | 1 ms | 256 KiB |
b08 | AC | 1 ms | 256 KiB |
b09 | AC | 1 ms | 256 KiB |
b10 | AC | 1 ms | 256 KiB |
b11 | AC | 1 ms | 256 KiB |
b12 | AC | 1 ms | 256 KiB |
b13 | AC | 1 ms | 256 KiB |
b14 | AC | 1 ms | 256 KiB |
b15 | AC | 1 ms | 256 KiB |
b16 | AC | 1 ms | 256 KiB |
b17 | AC | 1 ms | 256 KiB |
b18 | AC | 1 ms | 256 KiB |
b19 | AC | 1 ms | 256 KiB |
b20 | AC | 1 ms | 256 KiB |
b21 | AC | 1 ms | 256 KiB |
b22 | AC | 1 ms | 256 KiB |
b23 | AC | 1 ms | 256 KiB |