QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#308231 | #5495. 寿司晚宴 | james1BadCreeper | 100 ✓ | 42ms | 4460kb | C++14 | 1.6kb | 2024-01-19 19:25:10 | 2024-01-19 19:25:11 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
const int prime[] = {2, 3, 5, 7, 11, 13, 17, 19};
int n, P;
int f[256][256], g1[256][256], g2[256][256]; // g1 表示 1 取 big,g2 表示 2 取 big
struct Number {
int val, S, big;
void init(void) {
int tmp = val; big = -1;
for (int i = 0; i < 8; ++i) if (tmp % prime[i] == 0) {
S |= 1 << i;
while (tmp % prime[i] == 0) tmp /= prime[i];
}
if (tmp > 1) big = tmp;
}
bool operator< (const Number &a) const { return big < a.big; }
} a[505];
int main(void) {
ios::sync_with_stdio(0);
cin >> n >> P;
for (int i = 1; i < n; ++i) a[i].val = i + 1, a[i].init();
sort(a + 1, a + n);
for (int i = f[0][0] = 1; i < n; ++i) {
if (i == 1 || a[i].big == -1 || a[i].big != a[i - 1].big)
memcpy(g1, f, sizeof g1),
memcpy(g2, f, sizeof g2);
for (int j = 255; j >= 0; --j) for (int k = 255; k >= 0; --k)
if ((j & k) == 0) {
if ((a[i].S & k) == 0) g1[j | a[i].S][k] = (g1[j | a[i].S][k] + g1[j][k]) % P;
if ((a[i].S & j) == 0) g2[j][k | a[i].S] = (g2[j][k | a[i].S] + g2[j][k]) % P;
}
if (i == n - 1 || a[i].big == -1 || a[i].big != a[i + 1].big) {
for (int j = 0; j < 256; ++j) for (int k = 0; k < 256; ++k)
if ((j & k) == 0) f[j][k] = (0ll + g1[j][k] + g2[j][k] - f[j][k]) % P;
}
}
int ans = 0;
for (int i = 0; i < 256; ++i) for (int j = 0; j < 256; ++j)
if ((i & j) == 0) ans = (ans + f[i][j]) % P;
cout << (ans + P) % P;
return 0;
}
详细
Test #1:
score: 10
Accepted
time: 1ms
memory: 4312kb
input:
2 1
output:
0
result:
ok single line: '0'
Test #2:
score: 10
Accepted
time: 2ms
memory: 4404kb
input:
13 12345
output:
3438
result:
ok single line: '3438'
Test #3:
score: 10
Accepted
time: 4ms
memory: 4404kb
input:
26 1000000000
output:
447212583
result:
ok single line: '447212583'
Test #4:
score: 10
Accepted
time: 10ms
memory: 4460kb
input:
99 90000001
output:
88114119
result:
ok single line: '88114119'
Test #5:
score: 10
Accepted
time: 3ms
memory: 4452kb
input:
50 19999991
output:
16185855
result:
ok single line: '16185855'
Test #6:
score: 10
Accepted
time: 15ms
memory: 4376kb
input:
144 1000000000
output:
108118957
result:
ok single line: '108118957'
Test #7:
score: 10
Accepted
time: 15ms
memory: 4444kb
input:
197 1200007
output:
132550
result:
ok single line: '132550'
Test #8:
score: 10
Accepted
time: 27ms
memory: 4308kb
input:
289 1200007
output:
1181263
result:
ok single line: '1181263'
Test #9:
score: 10
Accepted
time: 32ms
memory: 4416kb
input:
362 99991111
output:
81393435
result:
ok single line: '81393435'
Test #10:
score: 10
Accepted
time: 42ms
memory: 4392kb
input:
499 99999999
output:
7282170
result:
ok single line: '7282170'
Extra Test:
score: 0
Extra Test Passed