結果
| 問題 |
No.2428 Returning Shuffle
|
| コンテスト | |
| ユーザー |
Kirby0717
|
| 提出日時 | 2023-08-15 03:05:47 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 555 ms / 2,000 ms |
| コード長 | 1,197 bytes |
| コンパイル時間 | 2,387 ms |
| コンパイル使用メモリ | 200,064 KB |
| 最終ジャッジ日時 | 2025-02-16 08:17:22 |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 23 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
template<class T>
using vec = vector<T>;
template<class T, size_t S>
using arr = array<T, S>;
int main(){
vec<ll> A, S;
ll N, M, T;
vec<ll> L;
cin >> N >> M;
for (ll n = 0; n <= N; n++) A.emplace_back(n);
for (ll m = 0; m < M; m++) {
cin >> T;
S.resize(T);
for (ll t = 0; t < T; t++) cin >> S[t];
S.emplace_back(0);
for (ll t = T - 1; t >= 0; t--) A[S[t + 1]] = A[S[t]];
A[S[0]] = A[0];
}
for (ll n = 1; n <= N; n++) if (A[n] != n) {
ll now = n, d = 1, next;
while (A[now] != n) {
d++;
next = A[now];
A[now] = now;
now = next;
}
A[now] = now;
L.emplace_back(d);
}
vec<bool> P(1001, true);
P[0] = P[1] = false;
for (ll n = 2; n <= 1000; n++) if (P[n]) for (ll t = 2 * n; t <= 1000; t += n) P[t] = false;
vec<ll> ans_fac(N + 1, 0);
for (auto e : L) {
ll rt = sqrt(e);
for (ll p = 2; p <= rt; p++) if (P[p]) {
ll c = 0;
while (e % p == 0) c++, e /= p;
ans_fac[p] = max(ans_fac[p], c);
}
ans_fac[e] = max(ans_fac[e], 1LL);
}
ll ans = 1;
for (ll n = 1; n <= N; n++) for (ll i = 0; i < ans_fac[n]; i++) ans = (ans * n) % 998244353;
cout << ans << endl;
return 0;
}
Kirby0717