您的位置:首页 > 其它

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

2017-07-23 15:25 465 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  kmp