結果
問題 | No.1050 Zero (Maximum) |
ユーザー |
![]() |
提出日時 | 2020-05-08 22:38:37 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 68 ms / 2,000 ms |
コード長 | 5,818 bytes |
コンパイル時間 | 2,614 ms |
コンパイル使用メモリ | 205,536 KB |
最終ジャッジ日時 | 2025-01-10 09:04:06 |
ジャッジサーバーID (参考情報) |
judge5 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 15 |
ソースコード
#pragma region template 2.4#include <bits/stdc++.h>using namespace std;template <typename T>using pq_asc = priority_queue<T, vector<T>, greater<T>>;typedef long long ll;typedef vector<ll> vi;typedef vector<vi> vvi;typedef pair<ll, ll> ii;typedef vector<ii> vii;typedef vector<string> vs;#define REP(i, n) for (ll i = 0; i < (n); ++i)#define REP1(i, n) for (ll i = 1; i <= (n); ++i)#define FOR(i, a) for (auto &i : a)#define CH(f, x, y) x = f(x, y)#define IN(T, x) \T x; \cin >> x;#define AIN(T, a, n) \vector<T> a(n); \FOR(i, a) \cin >> i;#define A2IN(T1, a, T2, b, n) \vector<T1> a(n); \vector<T2> b(n); \REP(i, n) \cin >> a[i] >> b[i];#define OUT(x) cout << (x) << endl;#define FOUT(x) cout << fixed << setprecision(15) << (x) << endl;#define ALL(a) (a).begin(), (a).end()#define SORT(a) sort(ALL(a))#define RSORT(a) \SORT(a); \reverse(ALL(a))#define DUMP(x) cout << #x << " = " << (x) << endl;#define DUMPA(a) \cout << #a << " = {"; \JOUT(ALL(a), ", ", cout) << "}" << endl;template <typename T>ostream &JOUT(T s, T e, string sep = " ", ostream &os = cout){if (s != e){os << *s;++s;}while (s != e){os << sep << *s;++s;}return os;}ostream &YES(bool cond, string yes = "Yes", string no = "No", ostream &os = cout){if (cond){os << yes << endl;}else{os << no << endl;}return os;}template <typename T1, typename T2>ostream &operator<<(ostream &os, const pair<T1, T2> &p){os << '(' << p.first << ", " << p.second << ')';return os;}template <typename T>ostream &operator<<(ostream &os, const vector<T> &v){os << '[';JOUT(ALL(v), ", ", os) << ']';return os;}const ll INF = 1e18;const ll MOD = 1e9 + 7;#pragma endregion template#pragma region mint 1.1struct mint{ll a;mint(ll a = 0) : a((a % MOD + MOD) % MOD) {}mint pow(ll y){ll exp = y;mint res = 1;mint p = a;while (exp){if (exp & 1){res *= p;}exp >>= 1;p *= p;}return res;}mint pow(mint y){return pow(y.a);}mint &operator+=(ll y){*this = a + y;return *this;}mint &operator+=(mint y){*this += y.a;return *this;}mint &operator-=(ll y){*this = a - y;return *this;}mint &operator-=(mint y){*this -= y.a;return *this;}mint &operator*=(ll y){*this = a * y;return *this;}mint &operator*=(mint y){*this *= y.a;return *this;}mint &operator/=(ll y){*this *= mint(y).pow(MOD - 2);return *this;}mint &operator/=(const mint y){*this /= y.a;return *this;}mint &operator++(){*this += 1;return *this;}mint &operator++(int){*this += 1;return *this;}mint &operator--(){*this -= 1;return *this;}mint &operator--(int){*this -= 1;return *this;}};mint operator+(const mint &x, const mint &y){return mint(x.a) += y;}mint operator+(const mint &x, const ll &y){return mint(x.a) += y;}mint operator+(const ll &x, mint &y){return mint(x) += y;}mint operator-(const mint &x, const mint &y){return mint(x.a) -= y;}mint operator-(const mint &x, const ll &y){return mint(x.a) -= y;}mint operator-(const ll &x, const mint &y){return mint(x) -= y;}mint operator*(const mint &x, const mint &y){return mint(x.a) *= y;}mint operator*(const mint &x, const ll &y){return mint(x.a) *= y;}mint operator*(const ll &x, const mint &y){return mint(x) *= y;}mint operator/(const mint &x, const mint &y){return mint(x.a) /= y;}mint operator/(const mint &x, const ll &y){return mint(x.a) /= y;}mint operator/(const ll &x, const mint &y){return mint(x) /= y;}bool operator==(const mint &x, const mint &y){return x.a == y.a;}bool operator==(const mint &x, const ll &y){return x.a == y;}bool operator==(const ll &x, mint &y){return x == y.a;}bool operator!=(const mint &x, const mint &y){return !(x == y);}bool operator!=(const mint &x, const ll &y){return !(x == y);}bool operator!=(const ll &x, mint &y){return !(x == y);}istream &operator>>(istream &is, mint &i){is >> i.a;return is;}ostream &operator<<(ostream &os, const mint &i){os << i.a;return os;}typedef vector<mint> vm;#pragma endregion mintint main(){IN(ll, M);IN(ll, K);vector<vm> A(M, vm(M));REP(i, M){REP(j, M){++A[(i + j) % M][j];++A[(i * j) % M][j];}}vector<vm> B(M, vm(M));REP(i, M){B[i][i] = 1;}while (K > 0){if (K & 1){vector<vm> C(M, vm(M));REP(i, M){REP(j, M){REP(k, M){C[i][j] += B[i][k] * A[k][j];}}}B = C;}vector<vm> C(M, vm(M));REP(i, M){REP(j, M){REP(k, M){C[i][j] += A[i][k] * A[k][j];}}}A = C;K >>= 1;}OUT(B[0][0]);}