QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#799146#8211. Enumerating Substringsucup-team173AC ✓91ms35168kbC++202.3kb2024-12-04 23:08:222024-12-04 23:08:22

Judging History

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

  • [2024-12-04 23:08:22]
  • 评测
  • 测评结果:AC
  • 用时:91ms
  • 内存:35168kb
  • [2024-12-04 23:08:22]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
#define pb push_back

using ll = long long;
using db = double;

const int mod = 1e9 + 7;
int add(int x, int y) {
    x += y;
    return x >= mod ? x - mod : x;
}
void addto(int& x, int y) {
    x += y;
    if (x >= mod) x -= mod;
}
int mul(int x, int y) {
    return 1ll * x * y % mod;
}

int qpow(int a, int b) {
    int ans = 1;
    while (b) {
        if (b & 1) ans = mul(ans, a);
        a = mul(a, a);
        b >>= 1;
    }
    return ans;
}

const int maxn = 1e6 + 10, maxm = 2e3 + 10;
int n, m, k;
int beautiful[maxm][maxm];
int wxw[maxm];
int mem[maxm][maxm];
int calc(int d, int w) {
    if (mem[d][w] != -1) return mem[d][w];
    int& ans = mem[d][w];
    if (k - d <= 0) return ans = 0;
    if (w == 0) return ans = 1;
    assert((k - d - w + 1 + mod) % mod >= 0);
    return ans = mul(calc(d, w - 1), (k - d - w + 1 + mod) % mod);
}
void solve() {
    memset(mem, -1, sizeof mem);
    cin >> n >> m >> k;
    beautiful[0][0] = 1;
    for (int i = 1; i <= m; i++) {
        for (int j = 1; j <= m; j++) {
            if (k - j + 1 > 0)
                addto(beautiful[i][j], mul(beautiful[i - 1][j - 1], k - j + 1));
            if (j * 2 - (i - 1) > 0)
                addto(beautiful[i][j], mul(beautiful[i - 1][j], j * 2 - (i - 1)));
            // cerr << beautiful[i][j] << " \n"[j == m];
        }
    }

    int ans = 0;
    for (int i = 1; i <= m; i++) {
        addto(wxw[0], beautiful[m][i]);
    }
    for (int w = 1; w * 2 <= m; w++) {
        int x = m - w * 2;
        for (int d = 0; d <= x; d++) {
            addto(wxw[w], mul(beautiful[x][d], calc(d, w)));
        }
        addto(wxw[0], mod - wxw[w]);
        for (int t = 1; t * x + (t + 1) * w <= n; t++) {
            int len = t * x + (t + 1) * w;
            addto(ans, mul(wxw[w], mul(n - len + 1, mul(qpow(k, n - len), t % 2 ? 1 : mod - 1))));
        }
    }
    addto(ans, mul(mul(n - m + 1, wxw[0]), qpow(k, n - m)));
    // for (int i = 0; i <= m; i++) {
    //     cout << wxw[i] << " \n"[i == m];
    // }
    cout << ans << "\n";
}
signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    int t = 1;
    // cin >> t;
    while (t--) solve();
    return 0;
}
/*

1-2-3-4-5
*/

/*
 5
 3 4 1
 2 1 1
 4 5 1
 3 2 1
 3
 2 2
 3 2
 1 2
*/

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 3ms
memory: 19516kb

input:

4 2 3

output:

228

result:

ok 1 number(s): "228"

Test #2:

score: 0
Accepted
time: 91ms
memory: 35168kb

input:

999999 1999 12345678

output:

52352722

result:

ok 1 number(s): "52352722"

Test #3:

score: 0
Accepted
time: 0ms
memory: 20548kb

input:

7 4 2

output:

182

result:

ok 1 number(s): "182"

Test #4:

score: 0
Accepted
time: 0ms
memory: 20692kb

input:

4 3 4

output:

480

result:

ok 1 number(s): "480"

Test #5:

score: 0
Accepted
time: 4ms
memory: 19576kb

input:

3 1 1

output:

3

result:

ok 1 number(s): "3"

Test #6:

score: 0
Accepted
time: 0ms
memory: 20292kb

input:

5 5 1

output:

0

result:

ok 1 number(s): "0"

Test #7:

score: 0
Accepted
time: 0ms
memory: 20348kb

input:

7 4 3

output:

5784

result:

ok 1 number(s): "5784"

Test #8:

score: 0
Accepted
time: 3ms
memory: 20544kb

input:

5 2 4

output:

3932

result:

ok 1 number(s): "3932"

Test #9:

score: 0
Accepted
time: 0ms
memory: 21288kb

input:

8 2 2

output:

1522

result:

ok 1 number(s): "1522"

Test #10:

score: 0
Accepted
time: 0ms
memory: 19532kb

input:

8 1 2

output:

2048

result:

ok 1 number(s): "2048"

Test #11:

score: 0
Accepted
time: 0ms
memory: 20964kb

input:

7 5 3

output:

2430

result:

ok 1 number(s): "2430"

Test #12:

score: 0
Accepted
time: 0ms
memory: 21196kb

input:

10 4 3

output:

272004

result:

ok 1 number(s): "272004"

Test #13:

score: 0
Accepted
time: 49ms
memory: 23604kb

input:

675978 614 2

output:

0

result:

ok 1 number(s): "0"

Test #14:

score: 0
Accepted
time: 15ms
memory: 19636kb

input:

244613 38 1

output:

0

result:

ok 1 number(s): "0"

Test #15:

score: 0
Accepted
time: 14ms
memory: 30936kb

input:

186293 1462 1

output:

0

result:

ok 1 number(s): "0"

Test #16:

score: 0
Accepted
time: 6ms
memory: 26080kb

input:

24867 886 1

output:

0

result:

ok 1 number(s): "0"

Test #17:

score: 0
Accepted
time: 65ms
memory: 27420kb

input:

976164 1014 2

output:

0

result:

ok 1 number(s): "0"

Test #18:

score: 0
Accepted
time: 15ms
memory: 20160kb

input:

179356 2 716844809

output:

577866092

result:

ok 1 number(s): "577866092"

Test #19:

score: 0
Accepted
time: 40ms
memory: 20120kb

input:

621001 130 310625363

output:

892869197

result:

ok 1 number(s): "892869197"

Test #20:

score: 0
Accepted
time: 45ms
memory: 25760kb

input:

678862 850 754662812

output:

582264789

result:

ok 1 number(s): "582264789"

Test #21:

score: 0
Accepted
time: 46ms
memory: 27032kb

input:

650845 978 348443366

output:

825425732

result:

ok 1 number(s): "825425732"

Test #22:

score: 0
Accepted
time: 44ms
memory: 21988kb

input:

669914 402 87448112

output:

318098088

result:

ok 1 number(s): "318098088"

Test #23:

score: 0
Accepted
time: 64ms
memory: 22920kb

input:

998593 530 681228665

output:

408255654

result:

ok 1 number(s): "408255654"

Test #24:

score: 0
Accepted
time: 40ms
memory: 34804kb

input:

369361 1954 125266115

output:

509912384

result:

ok 1 number(s): "509912384"

Test #25:

score: 0
Accepted
time: 62ms
memory: 30304kb

input:

900226 1378 424079373

output:

406320917

result:

ok 1 number(s): "406320917"

Test #26:

score: 0
Accepted
time: 33ms
memory: 31308kb

input:

334887 1506 17859926

output:

503264679

result:

ok 1 number(s): "503264679"

Test #27:

score: 0
Accepted
time: 64ms
memory: 23068kb

input:

936048 544 53978328

output:

548647866

result:

ok 1 number(s): "548647866"

Test #28:

score: 0
Accepted
time: 21ms
memory: 29464kb

input:

152789 1264 792983073

output:

839541707

result:

ok 1 number(s): "839541707"

Test #29:

score: 0
Accepted
time: 60ms
memory: 30336kb

input:

714493 1392 91796331

output:

721071046

result:

ok 1 number(s): "721071046"

Test #30:

score: 0
Accepted
time: 21ms
memory: 25452kb

input:

269571 816 830801077

output:

330064211

result:

ok 1 number(s): "330064211"

Test #31:

score: 0
Accepted
time: 58ms
memory: 26732kb

input:

845120 944 424581630

output:

348960190

result:

ok 1 number(s): "348960190"

Test #32:

score: 0
Accepted
time: 31ms
memory: 22028kb

input:

533990 368 163586376

output:

522092095

result:

ok 1 number(s): "522092095"

Test #33:

score: 0
Accepted
time: 24ms
memory: 33604kb

input:

181707 1792 462399634

output:

373795106

result:

ok 1 number(s): "373795106"

Test #34:

score: 0
Accepted
time: 40ms
memory: 34548kb

input:

417349 1920 761212891

output:

587051329

result:

ok 1 number(s): "587051329"

Test #35:

score: 0
Accepted
time: 42ms
memory: 30036kb

input:

526583 1344 500217637

output:

108767800

result:

ok 1 number(s): "108767800"

Test #36:

score: 0
Accepted
time: 55ms
memory: 24872kb

input:

867054 769 93998191

output:

239123369

result:

ok 1 number(s): "239123369"

Extra Test:

score: 0
Extra Test Passed