- [KBC003D] Flu 2
建议
- 2024-12-27 17:19:06 @
跟 KBC003D 交换。
原因,玄学算法后来被我卡了,正解矩阵快速幂,显然比原 D 的 BFS 板子更简单。
#include <bits/stdc++.h>
using namespace std;
// Time complexity: O(max_mod * max_mod * log(k))
const int max_mod = 1500;
char baza[max_mod];
char ans[2][max_mod], org = 0;
int mod;
long long k;
void load() {
int n, t;
scanf("%lld%d%d", &k, &mod, &n);
for (int j = 0; j < n; ++j)
scanf("%d", &t) && (baza[t] = 1);
}
void solve() {
ans[org][1] = 1;
for (unsigned long long mask = (1ll<<3); mask; mask >>=1) {
memset(ans[!org], 0, mod);
for (int i = 0; i < mod; ++i)
for (int j = 0; j < mod; ++j)
if (ans[org][i] && ans[org][j])
ans[!org][ (i*j) % mod ] = 1;
org = !org;
if (mask & k) {
memset(ans[!org], 0, mod);
for (int i = 0; i < mod; ++i)
for (int j = 0; j < mod; ++j)
if (ans[org][i] && baza[j])
ans[!org][ (i*j) % mod ] = 1;
org = !org;
}
}
for (int j = 0; j < mod; ++j) {
if (ans[org][j])
printf("%d ", j);
}
printf("\n");
}
int main() {
load();
solve();
return 0;
}
信息
- ID
- 73
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 2
- 已通过
- 2
- 上传者