結果
問題 | No.1800 Random XOR |
ユーザー |
|
提出日時 | 2022-12-20 14:15:44 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 3,660 bytes |
コンパイル時間 | 1,909 ms |
コンパイル使用メモリ | 167,456 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-18 01:49:48 |
合計ジャッジ時間 | 2,544 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 14 |
ソースコード
#define PROBLEM "https://yukicoder.me/problems/no/1800"// #pragma GCC target("avx2")// #pragma GCC optimize("O3")// #pragma GCC optimize("unroll-loops")#include <bits/stdc++.h>using namespace std;using ll = long long;using ld = long double;using pii = pair<int, int>;using pll = pair<ll, ll>;#define pb push_back#define mp make_pair#define mt make_tuple#define all(x) (x).begin(), (x).end()#define rall(x) (x).rbegin(), (x).rend()#define elif else if#define updiv(N, X) ((N + X - 1) / X)#define sigma(a, b) ((a + b) * (b - a + 1) / 2)struct fast_ios {fast_ios() {cin.tie(nullptr);ios::sync_with_stdio(false);cout << fixed << setprecision(15);};} fast_ios_;template <typename T>inline bool chmax(T& a, T b) { return ((a < b) ? (a = b, true) : (false)); }template <typename T>inline bool chmin(T& a, T b) { return ((a > b) ? (a = b, true) : (false)); }constexpr int inf = 1 << 30;constexpr ll INF = 1LL << 60;constexpr int dx[] = {1, 0, -1, 0, 1, -1, 1, -1};constexpr int dy[] = {0, 1, 0, -1, 1, 1, -1, -1};constexpr int mod = 998244353;constexpr int MOD = 1e9 + 7;template <int MOD>struct Fp {long long val;constexpr Fp(long long v = 0) noexcept : val(v % MOD) {if (val < 0) val += MOD;}constexpr int getmod() const { return MOD; }constexpr Fp operator-() const noexcept {return val ? MOD - val : 0;}constexpr Fp operator+(const Fp& r) const noexcept { return Fp(*this) += r; }constexpr Fp operator-(const Fp& r) const noexcept { return Fp(*this) -= r; }constexpr Fp operator*(const Fp& r) const noexcept { return Fp(*this) *= r; }constexpr Fp operator/(const Fp& r) const noexcept { return Fp(*this) /= r; }constexpr Fp& operator+=(const Fp& r) noexcept {val += r.val;if (val >= MOD) val -= MOD;return *this;}constexpr Fp& operator-=(const Fp& r) noexcept {val -= r.val;if (val < 0) val += MOD;return *this;}constexpr Fp& operator*=(const Fp& r) noexcept {val = val * r.val % MOD;return *this;}constexpr Fp& operator/=(const Fp& r) noexcept {long long a = r.val, b = MOD, u = 1, v = 0;while (b) {long long t = a / b;a -= t * b, swap(a, b);u -= t * v, swap(u, v);}val = val * u % MOD;if (val < 0) val += MOD;return *this;}constexpr bool operator==(const Fp& r) const noexcept {return this->val == r.val;}constexpr bool operator!=(const Fp& r) const noexcept {return this->val != r.val;}friend constexpr istream& operator>>(istream& is, Fp<MOD>& x) noexcept {is >> x.val;x.val %= MOD;if (x.val < 0) x.val += MOD;return is;}friend constexpr ostream& operator<<(ostream& os, const Fp<MOD>& x) noexcept {return os << x.val;}friend constexpr Fp<MOD> modpow(const Fp<MOD>& r, long long n) noexcept {if (n == 0) return 1;if (n < 0) return modpow(modinv(r), -n);auto t = modpow(r, n / 2);t = t * t;if (n & 1) t = t * r;return t;}friend constexpr Fp<MOD> modinv(const Fp<MOD>& r) noexcept {long long a = r.val, b = MOD, u = 1, v = 0;while (b) {long long t = a / b;a -= t * b, swap(a, b);u -= t * v, swap(u, v);}return Fp<MOD>(u);}};int main() {using mint = Fp<MOD>;ll N, M;cin >> N >> M;mint ans = (modpow(mint(2), M) - 1) / 2;cout << ans << endl;}