50
puhpqmujuhphpmuhppppuhhpphhfupppuhhmupsphpkpuhpupppuupphpupppuhphhphppopuppphphhhphuhuxmuuuhhuuu
<214 bytes omitted>
用户输出
8415
系统信息
Exited with return code 0
编号 | 题目 | 状态 | 分数 | 总时间 | 内存 | 代码 / 答案文件 | 提交者 | 提交时间 |
---|---|---|---|---|---|---|---|---|
#22790 | #1006. F. “全天候”壮大,CSF效应 | Runtime Error | 77 | 36 ms | 2964 K | C++ 11 / 3.9 K | docriz🦆 | 2020-02-14 19:59:48 |
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
const int MAXM = 22;
const int MOD = 998244353;
int n, m, k;
char s[MAXN], t[MAXN];
int tot[MAXM][MAXM];
int mat[30][MAXM][MAXM];
int pre[MAXN][MAXM][MAXM];
int suf[MAXN][MAXM][MAXM];
int tmp[MAXM][MAXM];
int getBlock(int p) { return p / k; }
int main() {
scanf("%d", &k);
scanf("%s", s);
n = strlen(s);
scanf("%s", t);
m = strlen(t);
if (k) {
while (n % k != 0) {
s[n] = 'z' + 1;
++n;
}
}
for (int i = 0; i < 27; i++) {
for (int j = 0; j <= m; j++) {
mat[i][j][j] = 1;
}
for (int j = 0; j <= m - 1; j++) {
if (t[j] == char(i + 'a')) {
mat[i][j][j + 1] = 1;
}
}
}
for (int i = 0; i < n; i++) {
if (i == 0) {
for (int x = 0; x <= m; x++) {
for (int y = 0; y <= m; y++) {
tot[x][y] = mat[int(s[i] - 'a')][x][y];
}
}
} else {
// pre[i] = pre[i] * mat[s[i] - 'a']
memset(tmp, 0, sizeof(tmp));
int p = s[i] - 'a';
for (int y = 1; y <= m; y++) {
if (mat[p][y - 1][y]) {
for (int x = 0; x <= m; x++) {
tmp[x][y] += tot[x][y - 1];
if (tmp[x][y] >= MOD) {
tmp[x][y] -= MOD;
}
}
}
}
for (int x = 0; x <= m; x++) {
for (int y = 0; y <= m; y++) {
(tot[x][y] += tmp[x][y]) %= MOD;
}
}
}
}
if (k == 0) {
printf("%d\n", tot[0][m]);
return 0;
}
for (int i = 0; i < n; i++) {
if (i % k == 0) {
for (int x = 0; x <= m; x++) {
for (int y = 0; y <= m; y++) {
pre[i][x][y] = mat[int(s[i] - 'a')][x][y];
}
}
} else {
for (int x = 0; x <= m; x++) {
for (int y = 0; y <= m; y++) {
pre[i][x][y] = pre[i - 1][x][y];
}
}
memset(tmp, 0, sizeof(tmp));
int p = s[i] - 'a';
for (int y = 1; y <= m; y++) {
if (mat[p][y - 1][y]) {
for (int x = 0; x <= m; x++) {
tmp[x][y] += pre[i][x][y - 1];
if (tmp[x][y] >= MOD) {
tmp[x][y] -= MOD;
}
}
}
}
for (int x = 0; x <= m; x++) {
for (int y = 0; y <= m; y++) {
(pre[i][x][y] += tmp[x][y]) %= MOD;
}
}
}
}
assert(n % k == 0);
for (int i = n - 1; i >= 0; i--) {
if ((i + 1) % k == 0) {
for (int x = 0; x <= m; x++) {
for (int y = 0; y <= m; y++) {
suf[i][x][y] = mat[int(s[i] - 'a')][x][y];
}
}
} else {
for (int x = 0; x <= m; x++) {
for (int y = 0; y <= m; y++) {
suf[i][x][y] = suf[i + 1][x][y];
}
}
int p = s[i] - 'a';
memset(tmp, 0, sizeof(tmp));
for (int x = 0; x <= m - 1; x++) {
if (mat[p][x][x + 1]) {
for (int y = 0; y <= m; y++) {
tmp[x][y] += suf[i][x + 1][y];
if (tmp[x][y] >= MOD) {
tmp[x][y] -= MOD;
}
}
}
}
for (int x = 0; x <= m; x++) {
for (int y = 0; y <= m; y++) {
(suf[i][x][y] += tmp[x][y]) %= MOD;
}
}
}
}
int res = 0;
for (int i = 1; i < n; i++) {
if (s[i - 1] != t[0])
continue;
// [i, i + k - 1]
if (i % k == 0) {
res += suf[i][1][m];
if (res >= MOD)
res -= MOD;
} else {
// suf[i] * pre[i + k - 1]
int sum = 0;
if (i + k - 1 >= n) {
for (int t = 0; t <= m; t++) {
sum = (sum + suf[i][1][t] * (t == m ? 1 : 0)) % MOD;
}
} else {
for (int t = 0; t <= m; t++) {
sum = (sum + 1LL * suf[i][1][t] * pre[i + k - 1][t][m] % MOD) % MOD;
}
}
res = (res + sum) % MOD;
}
}
// res = ((tot[0][m] - res) % MOD + MOD) % MOD;
printf("%d\n", res);
return 0;
}
50
puhpqmujuhphpmuhppppuhhpphhfupppuhhmupsphpkpuhpupppuupphpupppuhphhphppopuppphphhhphuhuxmuuuhhuuu
<214 bytes omitted>
用户输出
8415
系统信息
Exited with return code 0
25
bodudsibxoordurxboduiiercrdrrioibsibrurrouiidimdobudqrccddduduuddcirldoodrbsrgdcuucirdrdxodrsdss
<339 bytes omitted>
用户输出
0
系统信息
Exited with return code 0
155
okvrvuupapbbruuxbkltbroyvpuhhruukuuhuurormrophkhuzkudtkubhpupvruuhutvukukkluvthbtkvrruvupprhhou
<384 bytes omitted>
用户输出
7005424
系统信息
Exited with return code 0
67
veztwlnrptnnawmmrlatnsemmnnwwkmnmmcmlswlwltwammnajtdsblsmpmwvrvlnsvnwtvsvltjenencfvejfjeevjjvfve
<384 bytes omitted>
用户输出
0
系统信息
Exited with return code 0
168
lyqetttbetbylytdebecttbdwebepeldbdyebydyylttbdyyeylaybdbeelbebybtmybblzbtybwbyetyebudbejdbydtlb
<379 bytes omitted>
用户输出
11261642
系统信息
Exited with return code 0
51
ebzzvzbesbizsbsbseieeiveehzibzbesbzvssvsvibiidzezxvbibzdeseebivbzibbbbzsizibveeezesizefzsbssivsv
<408 bytes omitted>
用户输出
5015
系统信息
Exited with return code 0
222
wygkyylvykvwonwkblwgowarlrkawkylwkatlaaolaylovclloagogyagyovkargkwlggkybcgryogaowyvkarykorwlcvv
<414 bytes omitted>
用户输出
32985309
系统信息
Exited with return code 0
270
datftlytuuyteflitgufyulgeiiuuegeypxgepffgeyuaiteieguuueglltyyguixienyutqiufleiyuutfguoefeetergt
<413 bytes omitted>
用户输出
336977768
系统信息
Exited with return code 0
33
dpypydphdypmmmydphpppddppyphdmdmmyhymhmhydphdhpmpggggdgghggggggggggfgggggsogggggggxgcggggggggggg
<408 bytes omitted>
用户输出
611
系统信息
Exited with return code 0
190
pcllcpckcpkscclkpckkpplckcpklkkcllcpkpckkckclklkkkklkckrckpkkklkkcllppckkpkkkpcpvckllckpllnclkl
<407 bytes omitted>
用户输出
1029783
系统信息
Exited with return code 0
64622
tiqwhhqzydyyjyttyjywychftqzjwthzuwyhypzjyctwjtwyowqyptczfrtrthzhwlchyydqtwgywchyttxqqyzwyqtey
<78969 bytes omitted>
系统信息
Killed: Segmentation fault
68641
rkcsktcmmcurdrsgsssmgxrkktchjdexjmgslhfxxttdxghsrmzhmcmuxxctxjkdrhgxkjgmdtxkjhcndtmujxtxxrtct
<93301 bytes omitted>
系统信息
Killed: Segmentation fault