bài olpkhhue22 - đếm dãy số bài này hơi khó nhưng mik cho =))))

include <bits/stdc++.h>

using namespace std;

define ll long long

const int MOD = 998244353;
const int MAXN = 900005;
int T, N, c[8][MAXN], p[255][100005], ch[255], ct[255];
vector<int> d[MAXN];

void preprocess() {
for (int i = 1; i < MAXN; i++) {
for (int j = i; j < MAXN; j += i) {
d[j].push_back(i);
}
}
p[0][0] = 1;
for (int i = 1; i < 255; i++) {
p[i][0] = 1;
for (int j = 1; j < 100005; j++) {
p[i][j] = 1LL * p[i][j - 1] * i % MOD;
}
}
}

int calculate(int v, int mx) {
const vector<int> &b = d[v];
int sz = b.size(), idx = 0;
memset(ch, 0, sizeof(int) * (sz + 1));
memset(ct, 0, sizeof(int) * (sz + 1));
for (int l = 1; l <= 7; l++) {
if (c[l][mx] != 0) {
while (idx < sz && b[idx] < l) idx++;
if (idx == sz || c[l][b[idx] - 1] > 0) return 0;
for (int i = idx; i < sz - 1; i++) {
ch[i - idx + 1] += c[l][b[i + 1] - 1] - c[l][b[i] - 1];
}
ct[sz - idx] += c[l][mx] - c[l][b[sz - 1] - 1];
}
}
ll res = 1, t1 = 1, t2 = 1;
for (int i = 1; i <= sz; i++) {
res = res * p[i][ch[i]] % MOD;
t1 = t1 * p[i][ct[i]] % MOD;
t2 = t2 * p[i - 1][ct[i]] % MOD;
}
return 1LL * res * (t1 - t2 + MOD) % MOD;
}

int main() {
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
preprocess();
cin >> T;
while (T--) {
memset(c, 0, sizeof c);
cin >> N;
int mx = 0;
for (int i = 1; i <= N; i++) {
int l, r;
cin >> l >> r;
c[l][r]++;
mx = max(mx, r);
}
for (int l = 1; l <= 7; l++) {
for (int i = 1; i <= mx; i++) {
c[l][i] += c[l][i - 1];
}
}
int res = 0;
for (int v = 1; v <= mx; v++) {
res = (res + calculate(v, mx)) % MOD;
}
cout << res << '\n';
}
return 0;
}

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.