QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#182562 | #4908. 完全表示 | zhoukangyang | 100 ✓ | 261ms | 36664kb | C++11 | 4.8kb | 2023-09-18 08:31:03 | 2023-09-18 08:31:04 |
Judging History
answer
#include<bits/stdc++.h>
#define L(i, j, k) for(int i = (j); i <= (k); ++i)
#define R(i, j, k) for(int i = (j); i >= (k); --i)
#define ll long long
#define vi vector < int >
#define sz(a) ((int) (a).size())
#define ll long long
#define ull unsigned long long
#define me(a, x) memset(a, x, sizeof(a))
using namespace std;
const int N = 1 << 19, mod = 164511353;
int qpow(int x, int y = mod - 2) {
int res = 1;
for(; y; x = (ll) x * x % mod, y >>= 1) if(y & 1) res = (ll) res * x % mod;
return res;
}
int fac[N], ifac[N], inv[N];
void init(int x) {
fac[0] = ifac[0] = inv[1] = 1;
L(i, 2, x) inv[i] = (ll) (mod - mod / i) * inv[mod % i] % mod;
L(i, 1, x) fac[i] = (ll) fac[i - 1] * i % mod, ifac[i] = (ll) ifac[i - 1] * inv[i] % mod;
}
int C(int x, int y) {
return x < y || y < 0 ? 0 : (ll) fac[x] * ifac[y] % mod * ifac[x - y] % mod;
}
inline int sgn(int x) {
return (x & 1) ? mod - 1 : 1;
}
int n, k, m, type;
int prm[N], mt[N], rmt[N], cnt[N], top;
int sum[N];
int fen[N];
int val[N];
int vl[N];
int total;
template < int N > struct deq {
int L, R;
int dp[N][41];
int stk[N], top;
deq() {
L = 0, R = -1;
me(dp[0], 0), dp[0][1] = 1;
}
void undo() {
--top;
}
int ndp[41];
void pb(int x) {
++total;
stk[++top] = x;
if(type == 1) {
memcpy(dp[top], dp[top - 1], sizeof(dp[top]));
L(i, 1, ::top) {
int A = mod - qpow(prm[i], x + mod - 1);
int m1 = mt[i] % 41, m2 = rmt[i] % 41;
me(ndp, 0);
L(j, 0, 40) if(dp[top][j]) {
(ndp[m1 * j % 41] += (ll)A * dp[top][j] % mod) %= mod;
(ndp[m2 * j % 41] += dp[top][j]) %= mod;
}
swap(ndp, dp[top]);
}
} else {
me(dp[top], 0);
L(k, 1, ::k) if(vl[k]) {
int A = (ll) vl[k] * qpow(k, x + mod - 1) % mod;
L(j, 0, 40) if(dp[top - 1][j])
(dp[top][k * j % 41] += (ll)A * dp[top - 1][j] % mod) %= mod;
}
}
}
void move(int l, int r) {
if(L > R) L = l, R = l - 1;
// assert(L <= l && R <= r)
R(i, r, R + 1) pb(i);
R = r;
int tmp = 0;
vi Z;
int cnt = 0;
while(tmp != l - L) Z.emplace_back(stk[top]), tmp += stk[top] < l, undo(), ++cnt;
cnt -= l - L, cnt *= 0.6;
while(top && cnt--) Z.emplace_back(stk[top]), undo();
sort(Z.begin(), Z.end());
R(i, sz(Z) - 1, 0) if(Z[i] >= l) pb(Z[i]);
L = l;
}
} ;
deq < N > T;
const int S = 111;
int add[S][S], mul[S][S];
int main() {
ios :: sync_with_stdio(false);
cin.tie(0); cout.tie(0);
init(N - 10);
cin >> n >> k >> m;
cin >> type;
if(type == 1) {
L(i, 2, k) if(k % i == 0) {
int c = 0;
while(k % i == 0) k /= i, ++c;
++top, prm[top] = i, cnt[top] = c, mt[top] = rmt[top] = 1;
L(j, 1, c) mt[top] *= i;
L(j, 1, c - 1) rmt[top] *= i;
}
L(c, 0, m) {
T.move(c - n + 1, c);
int MUL = 1;
L(i, 1, top)
MUL = (ll) MUL * qpow(qpow(rmt[i], c), n) % mod *
qpow(prm[i], (ll)n * (n - 1) / 2 % (mod - 1)) % mod * sgn(n) % mod;
L(x, 0, 40)
(sum[c] += (ll)T.dp[T.top][x] * MUL % mod) %= mod,
MUL = (ll) MUL * 2 % mod;
}
} else {
int E = -1;
// L(i, 0, k - 1)
// L(j, 0, k - 1)
// add[i][j] = (i + j) % k;
// L(i, 0, k - 1)
// L(j, 0, k - 1)
// mul[i][j] = i * j % k;
L(i, 0, k - 1)
L(j, 0, k - 1)
cin >> add[i][j];
L(i, 0, k - 1)
L(j, 0, k - 1)
cin >> mul[i][j];
L(i, 0, k - 1)
if(add[i][i] == i)
E = i;
// cout<<"E="<<E<<endl;
set < ll > ST;
ST.insert(1 << E);
L(p, 0, k - 1) {
set < ll > nST;
for(auto&u : ST) {
if(!(u >> p & 1)) {
ll nsub = u;
L(o, 0, k - 1) {
int cur = mul[o][p];
L(i, 0, k - 1)
if(u >> i & 1)
nsub |= 1 << add[cur][i];
}
ST.insert(nsub);
}
}
for(auto &u : nST) ST.insert(u);
}
vi qwq;
for(auto &u : ST) {
qwq.emplace_back(u);
}
vi dp(sz(qwq));
R(i, sz(qwq) - 1, 0) {
dp[i] = i == sz(qwq) - 1;
L(j, i + 1, sz(qwq) - 1) if((qwq[i] & qwq[j]) == qwq[i])
(dp[i] += mod - dp[j]) %= mod;
// L(j, 0, k - 1) {
// cout << (qwq[i] >> j & 1);
// }
// cout<<endl;
(vl[__builtin_popcount(qwq[i])] += dp[i]) %= mod;
}
L(c, 0, m) {
T.move(c - n + 1, c);
int MUL = qpow(k, (ll)n * (n - 1) / 2 % (mod - 1));
L(x, 0, 40)
(sum[c] += (ll)T.dp[T.top][x] * MUL % mod) %= mod, MUL = (ll) MUL * 2 % mod;
}
}
vi mul(m + 1);
mul[0] = 1;
L(i, 0, m) {
if(i) {
R(j, i - 1, 0) {
(mul[j + 1] += mul[j]) %= mod;
mul[j] = (ll) mul[j] * (mod - (i - 1)) % mod;
}
}
L(j, 0, i) {
(fen[i] += (ll) mul[j] * sum[j] % mod) %= mod;
}
}
L(i, 0, m)
fen[i] = (ll)fen[i] * qpow(qpow(2), i) % mod * ifac[i] % mod;
L(i, 0, m) {
L(j, 0, i) {
(val[j] += (ll)fen[i] * sgn(i - j) % mod * C(i, j) % mod) %= mod;
}
}
int ANS = 0;
L(i, 0, m) {
(ANS += (ll)val[i] * qpow(i, m) % mod) %= mod;
}
cout << ANS << '\n';
return 0;
}
詳細信息
Subtask #1:
score: 10
Accepted
Test #1:
score: 10
Accepted
time: 8ms
memory: 18416kb
input:
2 3 665 1
output:
51745605
result:
ok "51745605"
Test #2:
score: 0
Accepted
time: 7ms
memory: 19888kb
input:
2 4 641 1
output:
54153482
result:
ok "54153482"
Test #3:
score: 0
Accepted
time: 8ms
memory: 18280kb
input:
1 6 656 1
output:
119347748
result:
ok "119347748"
Test #4:
score: 0
Accepted
time: 4ms
memory: 18680kb
input:
1 8 170 1
output:
126971959
result:
ok "126971959"
Test #5:
score: 0
Accepted
time: 4ms
memory: 19968kb
input:
1 9 816 1
output:
14287284
result:
ok "14287284"
Test #6:
score: 0
Accepted
time: 8ms
memory: 18208kb
input:
1 12 233 1
output:
37178137
result:
ok "37178137"
Test #7:
score: 0
Accepted
time: 8ms
memory: 18852kb
input:
1 16 244 1
output:
91022688
result:
ok "91022688"
Test #8:
score: 0
Accepted
time: 4ms
memory: 19276kb
input:
1 18 218 1
output:
93037058
result:
ok "93037058"
Test #9:
score: 0
Accepted
time: 7ms
memory: 18220kb
input:
1 19 645 1
output:
53944276
result:
ok "53944276"
Test #10:
score: 0
Accepted
time: 4ms
memory: 18944kb
input:
1 20 333 1
output:
81197702
result:
ok "81197702"
Test #11:
score: 0
Accepted
time: 10ms
memory: 18104kb
input:
1 2 893 1
output:
17672119
result:
ok "17672119"
Test #12:
score: 0
Accepted
time: 10ms
memory: 19384kb
input:
1 19 887 1
output:
58567516
result:
ok "58567516"
Test #13:
score: 0
Accepted
time: 6ms
memory: 18564kb
input:
2 3 504 1
output:
60763909
result:
ok "60763909"
Subtask #2:
score: 15
Accepted
Test #14:
score: 15
Accepted
time: 3ms
memory: 18292kb
input:
19 90203 0 1
output:
142145213
result:
ok "142145213"
Test #15:
score: 0
Accepted
time: 3ms
memory: 19304kb
input:
18 9697 0 1
output:
153592927
result:
ok "153592927"
Test #16:
score: 0
Accepted
time: 7ms
memory: 19712kb
input:
20 41 0 1
output:
112957727
result:
ok "112957727"
Test #17:
score: 0
Accepted
time: 2ms
memory: 19308kb
input:
20 99991 0 1
output:
151341559
result:
ok "151341559"
Subtask #3:
score: 5
Accepted
Dependency #2:
100%
Accepted
Test #18:
score: 5
Accepted
time: 4ms
memory: 19460kb
input:
999 9749 0 1
output:
77370298
result:
ok "77370298"
Test #19:
score: 0
Accepted
time: 4ms
memory: 19484kb
input:
997 55103 0 1
output:
92054017
result:
ok "92054017"
Test #20:
score: 0
Accepted
time: 7ms
memory: 19568kb
input:
1000 41 0 1
output:
6438830
result:
ok "6438830"
Test #21:
score: 0
Accepted
time: 4ms
memory: 19048kb
input:
1000 99991 0 1
output:
31676606
result:
ok "31676606"
Subtask #4:
score: 5
Accepted
Dependency #3:
100%
Accepted
Test #22:
score: 5
Accepted
time: 20ms
memory: 36336kb
input:
99996 20089 0 1
output:
163612442
result:
ok "163612442"
Test #23:
score: 0
Accepted
time: 33ms
memory: 36336kb
input:
99996 17707 0 1
output:
109099283
result:
ok "109099283"
Test #24:
score: 0
Accepted
time: 20ms
memory: 34576kb
input:
100000 41 0 1
output:
131161322
result:
ok "131161322"
Test #25:
score: 0
Accepted
time: 35ms
memory: 34096kb
input:
100000 99991 0 1
output:
84487741
result:
ok "84487741"
Subtask #5:
score: 15
Accepted
Test #26:
score: 15
Accepted
time: 9ms
memory: 18376kb
input:
998 24 0 1
output:
75129854
result:
ok "75129854"
Test #27:
score: 0
Accepted
time: 8ms
memory: 18712kb
input:
998 35 0 1
output:
120341894
result:
ok "120341894"
Test #28:
score: 0
Accepted
time: 4ms
memory: 18456kb
input:
1000 30 0 1
output:
152799538
result:
ok "152799538"
Test #29:
score: 0
Accepted
time: 9ms
memory: 19532kb
input:
1000 82 0 1
output:
117109540
result:
ok "117109540"
Test #30:
score: 0
Accepted
time: 4ms
memory: 22068kb
input:
1000 100 0 1
output:
89805014
result:
ok "89805014"
Subtask #6:
score: 5
Accepted
Dependency #4:
100%
Accepted
Dependency #5:
100%
Accepted
Test #31:
score: 5
Accepted
time: 81ms
memory: 36332kb
input:
99998 20726 0 1
output:
63876769
result:
ok "63876769"
Test #32:
score: 0
Accepted
time: 149ms
memory: 36632kb
input:
99998 10270 0 1
output:
47691333
result:
ok "47691333"
Test #33:
score: 0
Accepted
time: 214ms
memory: 36560kb
input:
100000 30030 0 1
output:
80481158
result:
ok "80481158"
Test #34:
score: 0
Accepted
time: 216ms
memory: 36432kb
input:
100000 94710 0 1
output:
61977663
result:
ok "61977663"
Test #35:
score: 0
Accepted
time: 56ms
memory: 34604kb
input:
100000 100000 0 1
output:
163629325
result:
ok "163629325"
Subtask #7:
score: 15
Accepted
Dependency #6:
100%
Accepted
Test #36:
score: 15
Accepted
time: 3ms
memory: 18096kb
input:
96 26444 100 1
output:
28274469
result:
ok "28274469"
Test #37:
score: 0
Accepted
time: 4ms
memory: 18536kb
input:
96 1381 98 1
output:
108507497
result:
ok "108507497"
Test #38:
score: 0
Accepted
time: 5ms
memory: 19332kb
input:
100 30030 100 1
output:
96954743
result:
ok "96954743"
Test #39:
score: 0
Accepted
time: 6ms
memory: 18228kb
input:
100 94710 100 1
output:
4473750
result:
ok "4473750"
Test #40:
score: 0
Accepted
time: 4ms
memory: 22244kb
input:
100 100000 100 1
output:
119621887
result:
ok "119621887"
Subtask #8:
score: 15
Accepted
Dependency #1:
100%
Accepted
Dependency #7:
100%
Accepted
Test #41:
score: 15
Accepted
time: 138ms
memory: 36116kb
input:
99996 23632 996 1
output:
25805700
result:
ok "25805700"
Test #42:
score: 0
Accepted
time: 139ms
memory: 36436kb
input:
99998 15516 997 1
output:
55584997
result:
ok "55584997"
Test #43:
score: 0
Accepted
time: 252ms
memory: 34676kb
input:
100000 30030 1000 1
output:
131562265
result:
ok "131562265"
Test #44:
score: 0
Accepted
time: 261ms
memory: 36328kb
input:
100000 94710 1000 1
output:
149443247
result:
ok "149443247"
Test #45:
score: 0
Accepted
time: 70ms
memory: 36664kb
input:
100000 100000 1000 1
output:
111554062
result:
ok "111554062"
Subtask #9:
score: 15
Accepted
Test #46:
score: 15
Accepted
time: 58ms
memory: 30248kb
input:
99997 3 997 2 0 1 2 1 2 0 2 0 1 0 0 0 0 1 2 0 2 1
output:
16632035
result:
ok "16632035"
Test #47:
score: 0
Accepted
time: 52ms
memory: 30220kb
input:
99997 4 999 2 0 1 2 3 1 0 3 2 2 3 0 1 3 2 1 0 0 0 0 0 0 1 2 3 0 2 3 1 0 3 1 2
output:
137547387
result:
ok "137547387"
Test #48:
score: 0
Accepted
time: 136ms
memory: 30248kb
input:
100000 6 1000 2 0 1 2 3 4 5 1 2 3 4 5 0 2 3 4 5 0 1 3 4 5 0 1 2 4 5 0 1 2 3 5 0 1 2 3 4 0 0 0 0 0 0 0 1 2 3 4 5 0 2 4 0 2 4 0 3 0 3 0 3 0 4 2 0 4 2 0 5 4 3 2 1
output:
16561140
result:
ok "16561140"
Test #49:
score: 0
Accepted
time: 88ms
memory: 30316kb
input:
99999 8 1000 2 0 1 2 3 4 5 6 7 1 4 3 5 7 6 2 0 2 3 0 1 5 4 7 6 3 5 1 4 6 7 0 2 4 7 5 6 0 2 3 1 5 6 4 7 2 0 1 3 6 2 7 0 3 1 4 5 7 0 6 2 1 3 5 4 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 0 2 2 0 0 2 0 2 0 3 0 3 4 4 6 6 0 4 0 4 0 0 4 4 0 5 2 4 0 2 4 5 0 6 0 6 4 4 3 3 0 7 2 6 4 5 3 1
output:
163171319
result:
ok "163171319"
Test #50:
score: 0
Accepted
time: 62ms
memory: 30440kb
input:
99997 8 1000 2 0 1 2 3 4 5 6 7 1 2 3 0 5 6 7 4 2 3 0 1 6 7 4 5 3 0 1 2 7 4 5 6 4 5 6 7 0 1 2 3 5 6 7 4 1 2 3 0 6 7 4 5 2 3 0 1 7 4 5 6 3 0 1 2 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 0 2 0 2 0 2 0 2 0 3 2 1 4 7 6 5 0 4 0 4 0 4 0 4 0 5 2 7 4 1 6 3 0 6 0 6 0 6 0 6 0 7 2 5 4 3 6 1
output:
300232
result:
ok "300232"
Test #51:
score: 0
Accepted
time: 60ms
memory: 30308kb
input:
99997 8 997 2 0 1 2 3 4 5 6 7 1 2 3 0 5 6 7 4 2 3 0 1 6 7 4 5 3 0 1 2 7 4 5 6 4 5 6 7 0 1 2 3 5 6 7 4 1 2 3 0 6 7 4 5 2 3 0 1 7 4 5 6 3 0 1 2 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 0 2 0 2 0 2 0 2 0 3 2 1 4 7 6 5 0 4 0 4 2 6 2 6 0 5 2 7 6 3 4 1 0 6 0 6 2 4 2 4 0 7 2 5 6 1 4 3
output:
24928366
result:
ok "24928366"
Test #52:
score: 0
Accepted
time: 83ms
memory: 30296kb
input:
100000 8 999 2 0 1 2 3 4 5 6 7 1 0 7 6 5 4 3 2 2 7 0 5 6 3 4 1 3 6 5 0 7 2 1 4 4 5 6 7 0 1 2 3 5 4 3 2 1 0 7 6 6 3 4 1 2 7 0 5 7 2 1 4 3 6 5 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 0 2 0 0 2 0 2 2 0 3 2 3 2 5 0 5 0 4 0 0 4 0 4 4 0 5 2 3 0 5 2 3 0 6 0 0 6 0 6 6 0 7 2 3 6 5 4 1
output:
142695202
result:
ok "142695202"
Test #53:
score: 0
Accepted
time: 78ms
memory: 30188kb
input:
99997 16 999 2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 0 7 6 5 4 3 2 13 12 15 14 9 8 11 10 2 7 0 5 6 3 4 1 10 11 8 9 14 15 12 13 3 6 5 0 7 2 1 4 11 10 9 8 15 14 13 12 4 5 6 7 0 1 2 3 12 13 14 15 8 9 10 11 5 4 3 2 1 0 7 6 9 8 11 10 13 12 15 14 6 3 4 1 2 7 0 5 14 15 12 13 10 11 8 9 7 2 1 4 3 6 5 0 15 ...
output:
40840083
result:
ok "40840083"
Test #54:
score: 0
Accepted
time: 193ms
memory: 30424kb
input:
99996 18 1000 2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 4 3 5 2 0 9 8 11 10 7 6 15 14 17 16 13 12 2 3 0 1 5 4 7 6 9 8 11 10 13 12 15 14 17 16 3 5 1 4 0 2 8 9 10 11 6 7 14 15 16 17 12 13 4 2 5 0 3 1 10 11 6 7 8 9 16 17 12 13 14 15 5 0 4 2 1 3 11 10 7 6 9 8 17 16 13 12 15 14 6 9 7 8 10 11 12 13 ...
output:
155029514
result:
ok "155029514"
Test #55:
score: 0
Accepted
time: 75ms
memory: 30328kb
input:
100000 19 996 2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1 18 14 11 5 15 9 10 0 2 3 4 13 17 12 16 6 8 7 2 14 4 8 1 18 3 13 9 11 17 0 15 16 5 7 10 6 12 3 11 8 16 9 2 13 5 10 17 15 6 1 18 0 14 12 7 4 4 5 1 9 14 12 8 16 11 0 6 2 7 10 18 13 17 3 15 5 15 18 2 12 13 0 6 4 1 9 14 10 3 7 17 8 11 16 6 ...
output:
18522199
result:
ok "18522199"
Test #56:
score: 0
Accepted
time: 112ms
memory: 30604kb
input:
99999 20 1000 2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 1 3 7 8 9 6 2 4 5 0 16 17 18 19 15 11 12 13 14 10 2 7 3 4 5 0 1 8 9 6 11 12 13 14 10 16 17 18 19 15 3 8 4 5 0 2 7 9 6 1 12 13 14 10 11 17 18 19 15 16 4 9 5 0 2 3 8 6 1 7 13 14 10 11 12 18 19 15 16 17 5 6 0 2 3 4 9 1 7 8 14 10 11 12 13...
output:
26568180
result:
ok "26568180"