QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#83919#4812. Counting SequenceScintillaWA 569ms15464kbC++142.2kb2023-03-04 12:32:202023-03-04 12:32:21

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-03-04 12:32:21]
  • 评测
  • 测评结果:WA
  • 用时:569ms
  • 内存:15464kb
  • [2023-03-04 12:32:20]
  • 提交

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 c2[N], f[2][B * B];

  void Main() {
    rep(i, 1, B) c2[i] = c2[i - 1] + i - 1;
    f[1][0 + c2[B]] = 1;
    for (int i = 1, o = 1; i < B; ++ i, o ^= 1) {
      fill(f[o ^ 1], f[o ^ 1] + 2 * c2[B], 0);
      for (int x = B + 1; i * x - c2[i] <= n; ++ x) {
        int s = n - i * x;
        if (-c2[i] <= s && s <= c2[i]) add(ans, f[o][s + c2[B]]);
      }
      rep(s, -c2[i], c2[i]) if (f[o][s + c2[B]]) {
        add(f[o ^ 1][s + i + c2[B]], f[o][s + c2[B]]);
        add(f[o ^ 1][s - i + c2[B]], mul(f[o][s + c2[B]], c));
      }
    }
  }

}

int main() {
  n = read(), c = read();
  small::Main();
  large::Main();
  printf("%d\n", ans);
  return 0;
}

详细

Test #1:

score: 100
Accepted
time: 380ms
memory: 8528kb

input:

5 3

output:

8

result:

ok 1 number(s): "8"

Test #2:

score: 0
Accepted
time: 194ms
memory: 8716kb

input:

1 0

output:

1

result:

ok 1 number(s): "1"

Test #3:

score: 0
Accepted
time: 396ms
memory: 15408kb

input:

2022 39

output:

273239559

result:

ok 1 number(s): "273239559"

Test #4:

score: 0
Accepted
time: 375ms
memory: 8496kb

input:

1 998244352

output:

1

result:

ok 1 number(s): "1"

Test #5:

score: 0
Accepted
time: 383ms
memory: 8712kb

input:

1 12345678

output:

1

result:

ok 1 number(s): "1"

Test #6:

score: 0
Accepted
time: 377ms
memory: 8588kb

input:

20 998998

output:

643731701

result:

ok 1 number(s): "643731701"

Test #7:

score: 0
Accepted
time: 383ms
memory: 8660kb

input:

23 123

output:

947753998

result:

ok 1 number(s): "947753998"

Test #8:

score: 0
Accepted
time: 378ms
memory: 8792kb

input:

50 5555

output:

745339864

result:

ok 1 number(s): "745339864"

Test #9:

score: 0
Accepted
time: 384ms
memory: 9008kb

input:

60 6666

output:

690992218

result:

ok 1 number(s): "690992218"

Test #10:

score: 0
Accepted
time: 379ms
memory: 9076kb

input:

100 50

output:

169678588

result:

ok 1 number(s): "169678588"

Test #11:

score: 0
Accepted
time: 381ms
memory: 11056kb

input:

500 88888

output:

216149701

result:

ok 1 number(s): "216149701"

Test #12:

score: 0
Accepted
time: 387ms
memory: 13648kb

input:

1000 213456

output:

270989457

result:

ok 1 number(s): "270989457"

Test #13:

score: 0
Accepted
time: 401ms
memory: 15392kb

input:

2000 119988

output:

756425375

result:

ok 1 number(s): "756425375"

Test #14:

score: 0
Accepted
time: 407ms
memory: 15240kb

input:

3000 998244352

output:

71841227

result:

ok 1 number(s): "71841227"

Test #15:

score: 0
Accepted
time: 423ms
memory: 15252kb

input:

3000 555555555

output:

79880116

result:

ok 1 number(s): "79880116"

Test #16:

score: 0
Accepted
time: 421ms
memory: 15220kb

input:

4321 1234

output:

949603993

result:

ok 1 number(s): "949603993"

Test #17:

score: 0
Accepted
time: 254ms
memory: 15236kb

input:

5000 0

output:

5

result:

ok 1 number(s): "5"

Test #18:

score: 0
Accepted
time: 428ms
memory: 15136kb

input:

5000 88888777

output:

833064960

result:

ok 1 number(s): "833064960"

Test #19:

score: 0
Accepted
time: 438ms
memory: 15400kb

input:

5000 35557777

output:

696388498

result:

ok 1 number(s): "696388498"

Test #20:

score: 0
Accepted
time: 480ms
memory: 15464kb

input:

10000 123456

output:

434296902

result:

ok 1 number(s): "434296902"

Test #21:

score: -100
Wrong Answer
time: 569ms
memory: 15188kb

input:

20000 555555

output:

80208541

result:

wrong answer 1st numbers differ - expected: '34806915', found: '80208541'