51Nod-1554-欧姆诺姆和项链

来源:互联网 发布:java设计小游戏代码 编辑:程序博客网 时间:2024/05/29 11:15

ACM模版

描述

描述

题解

这个题思路好巧妙啊,我想了好久都没有想通,找了一个前辈的题解才搞懂……看了好大一会儿~~~

贴一下该大牛的题解:

描述

来源:_TCgogogo_’s blog 感谢大神详细的题解!!!

代码

#include <cstdio>#include <cstring>int const MAXN = 1e6 + 5;int n, k;char s[MAXN];char ans[MAXN];int nt[MAXN];void get_nt(){    nt[0] = -1;    for (int i = 1, j = -1; i < n; i++)    {        while (j != -1 && s[j + 1] != s[i])        {            j = nt[j];        }        if (s[j + 1] == s[i])        {            j++;        }        nt[i] = j;    }}int main(){    scanf("%d%d%s", &n, &k, s);    get_nt();    for(int i = 0; i < n; i++)    {        int len = i - nt[i];        int num = (i + 1) / len;        int t = num % k;        if (t == 0)        {            ans[i] = '1';        }        else        {            if (len * num != i + 1)            {                t++;            }            if (num / k >= t)            {                ans[i] = '1';            }            else            {                ans[i] = '0';            }        }    }    printf("%s\n", ans);    return 0;}