首页 > 其他 > 详细

字符串模拟赛T1

时间:2016-07-20 21:08:16      阅读:151      评论:0      收藏:0      [点我收藏+]

技术分享

技术分享

// source code from laekov for c0x17
#define PRID "bxjl"
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

typedef long long dint;

const int maxn = 100003;
const int mod = 998244353;

char a[maxn];
int n, m, ne[maxn], sz[maxn];

void preNext() {
    ne[1] = 0;
    for (int i = 2, j = 0; i <= n; ++ i) {
        for (; j && a[i] != a[j + 1]; j = ne[j]);
        if (a[i] == a[j + 1] && j + 1 < i) {
            ne[i] = ++ j;
        } else {
            ne[i] = 0;
        }
    }
    memset(sz, 0, sizeof(sz));
    for (int i = n; i; -- i) {
        ++ sz[i];
        sz[ne[i]] += sz[i];
    }
}

int main(int argc, char* args[]) {
    if (argc < 2 || strcmp(args[1], "-nf")) {
        freopen(PRID ".in", "r", stdin);
        freopen(PRID ".out", "w", stdout);
    }
    scanf("%s", a + 1);
    n = strlen(a + 1);
    preNext();
    dint ans(0);
    for (int i = 1; i <= n; ++ i) {
        ans += sz[i];
    }
    printf("%d\n", (int)(ans % mod));
}

 

字符串模拟赛T1

原文:http://www.cnblogs.com/hyfer/p/5689470.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!