結果
問題 |
No.2744 Power! or +1
|
ユーザー |
|
提出日時 | 2025-03-12 13:44:08 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,149 bytes |
コンパイル時間 | 4,367 ms |
コンパイル使用メモリ | 297,976 KB |
実行使用メモリ | 323,828 KB |
最終ジャッジ日時 | 2025-03-12 13:44:25 |
合計ジャッジ時間 | 14,798 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | -- * 2 |
other | TLE * 1 -- * 8 |
ソースコード
#include <bits/stdc++.h> using namespace std; const long long INFTY = 5e10; int main() { int N, a, b, c; cin >> N >> a >> b >> c; map<int, int> C; int x = N; for (int i = 2; i * i <= N; ++i) { while (x % i == 0) { x /= i; C[i]++; } } if (x > 1) { C[x]++; } int n = 0; for (auto &[p, cnt] : C) { n = max(n, (int)pow(p, cnt)); } int K = 0; while (pow(b, K) <= (long long)N * a) { K++; } vector<int> A(N); A[0] = A[1] = 1; for (int i = 2; i < N; ++i) { A[i] = (A[i - 1] * i) % N; } vector<vector<pair<int, long long>>> G(N + 1); for (int i = 1; i < N; ++i) { G[i].emplace_back((i + 1) % N, a); } G[N].emplace_back(0, c); for (int i = 2; i < N; ++i) { for (int k = 2; k <= K; ++k) { int m = 1; for (int j = 0; j < k; ++j) { m = (1LL * m * i) % N; } G[i].emplace_back(m, (long long)pow(b, k)); } int k1 = 2; while (pow(i, k1) < n) { k1++; } for (int k = k1; k <= K; ++k) { G[i].emplace_back(N, (long long)pow(b, k)); } } long long prod = 1; int J = N - 1; for (int i = 2; i < N; ++i) { prod *= i; if (prod >= n) { J = i; break; } } for (int i = 2; i < N; ++i) { G[i].emplace_back(A[i], c); if (i >= J) { G[i].emplace_back(N, c); } } for (int i = n; i < N; ++i) { G[i].emplace_back(0, c); } vector<long long> dist(N + 1, INFTY); dist[1] = 0; priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<>> que; que.emplace(0, 1); while (!que.empty()) { auto [d, u] = que.top(); que.pop(); if (dist[u] < d) continue; for (auto &[v, cost] : G[u]) { if (dist[v] > d + cost) { dist[v] = d + cost; que.emplace(dist[v], v); } } } cout << dist[0] << endl; return 0; }