QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#182562#4908. 完全表示zhoukangyang100 ✓261ms36664kbC++114.8kb2023-09-18 08:31:032023-09-18 08:31:04

Judging History

你现在查看的是最新测评结果

  • [2023-09-18 08:31:04]
  • 评测
  • 测评结果:100
  • 用时:261ms
  • 内存:36664kb
  • [2023-09-18 08:31:03]
  • 提交

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;
}

Details

Tip: Click on the bar to expand more detailed information

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"