QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#83915 | #4812. Counting Sequence | Scintilla | WA | 2ms | 3592kb | C++14 | 2.6kb | 2023-03-04 10:43:17 | 2023-03-04 10:43:21 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define rep(i, s, e) for (int i = s; i <= e; ++i)
#define drep(i, s, e) for (int i = s; i >= e; --i)
#define file(a) freopen(#a".in", "r", stdin), freopen(#a".out", "w", stdout)
#define pv(a) cout << #a << " = " << a << endl
#define pa(a, l, r) cout << #a " : "; rep(_, l, r) cout << a[_] << ' '; cout << endl
const int P = 998244353;
const int N = 3e5 + 10;
const int B = 800;
int read() {
int x = 0, f = 1; char c = getchar();
for (; c < '0' || c > '9'; c = getchar()) if (c == '-') f = -1;
for (; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - 48;
return x * f;
}
int inc(int a, int b) { return (a += b) >= P ? a - P : a; }
int dec(int a, int b) { return (a -= b) < 0 ? a + P : a; }
int mul(int a, int b) { return 1ll * a * b % P; }
void add(int &a, int b) { (a += b) >= P ? a -= P : 1; }
void sub(int &a, int b) { (a -= b) < 0 ? a += P : 1; }
int qpow(int a, int b) { int res = 1; for (; b; b >>= 1, a = mul(a, a)) if (b & 1) res = mul(res, a); return res; }
int n, c, ans;
namespace small {
const int M = 1.3e3 + 10;
const int L = 1.3e3;
int f[M][M];
void Main() {
for (int i = 1, o = 1; i <= n; ++ i, o = (o + 1) % M) {
fill(f[o] + 1, f[o] + L + 1, 0);
if (i <= B) f[o][i] = 1;
// cout << "i, o = " << i << ' ' << o << endl;
rep(j, 1, L) {
add(f[o][j], f[(o - j + M) % M][j - 1]);
add(f[o][j], mul(f[(o - j + M) % M][j + 1], c));
}
}
rep(i, 1, B) add(ans, f[n % M][i]);
}
}
namespace large {
int pool[200000000], cur, *f[N], *g, c2[N], lim[N];
void Main() {
rep(i, 1, B) c2[i] = c2[i - 1] + i - 1;
rep(i, B + 1, n) {
for (lim[i] = 1; i * lim[i] - c2[lim[i]] <= n; ++ lim[i]);
cur += c2[lim[i]];
f[i] = pool + cur;
cur += c2[lim[i]];
}
// pa(c2, 1, B);
// pa(lim, B + 1, n);
cur += c2[B];
g = pool + cur;
cur += c2[B];
rep(i, B + 1, n) f[i][0] = 1;
add(ans, 1);
rep(i, 2, n) {
rep(s, -c2[i], c2[i]) g[s] = 0;
for (int j = B + 1; j <= n && i < lim[j]; ++ j) {
rep(s, -c2[i], c2[i]) g[s] = f[j][s];
// cout << "i, j = " << i << ' ' << j << endl;
rep(s, -c2[i], c2[i]) {
f[j][s] = g[s - i + 1];
add(f[j][s], mul(f[j + 1][s + i - 1], c));
if (i * j + s == n) {
// cout << "i, j = " << i << ' ' << j << endl;
add(ans, f[j][s]);
}
}
}
}
}
}
int main() {
n = read(), c = read();
small::Main();
large::Main();
printf("%d\n", ans);
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 2ms
memory: 3592kb
input:
5 3
output:
9
result:
wrong answer 1st numbers differ - expected: '8', found: '9'