結果
問題 | No.685 Logical Operations |
ユーザー |
![]() |
提出日時 | 2018-05-11 23:36:35 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,214 bytes |
コンパイル時間 | 1,511 ms |
コンパイル使用メモリ | 167,072 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-06-28 09:03:54 |
合計ジャッジ時間 | 2,418 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 27 |
ソースコード
#include <bits/stdc++.h>using namespace std;#define INF_LL (int64)1e18#define INF (int32)1e9#define REP(i, n) for(int i = 0;i < (n);i++)#define FOR(i, a, b) for(int i = (a);i < (b);i++)#define all(x) x.begin(),x.end()#define fs first#define sc secondusing int32 = int_fast32_t;using uint32 = uint_fast32_t;using int64 = int_fast64_t;using uint64 = uint_fast64_t;using PII = pair<int32, int32>;using PLL = pair<int64, int64>;const double eps = 1e-10;template<typename A, typename B>inline void chmin(A &a, B b){if(a > b) a = b;}template<typename A, typename B>inline void chmax(A &a, B b){if(a < b) a = b;}using PDI = pair<double, int32>;const int64 mod = 1e9+7;int64 dp[64][2][2][2] = {};int64 N;int64 dfs(int32 d=62, int32 tight=1, int32 zero=1, int32 sat=0){if(d == -1) return sat;int64 &ret = dp[d][tight][zero][sat];if(~ret) return ret;int32 lim = (tight ? (N >> d & 1) : 1);ret = 0;REP(i, lim+1){REP(j, (zero ? lim+1 : 2)){if(zero && (i < j || i+j == 2)) continue;ret += dfs(d-1, tight&(i == lim), zero&(i+j==0), sat|(!zero & i+j == 2));ret %= mod;}}return ret;}int main(void){cin >> N;memset(dp, -1, sizeof dp);cout << dfs() << endl;}