51nod 1554 歐姆諾姆和項鍊 題解

2022-05-16 16:41:02 字數 1391 閱讀 2945

題目:

有一天,歐姆諾姆發現了一串長度為n的寶石串,上面有五顏六色的寶石。他決定摘取前面若干個寶石來做成乙個漂亮的項鍊。

他對漂亮的項鍊是這樣定義的,現在有一條項鍊s,當s=a+b+a+b+a+...+a+b+a的時候是漂亮的,這兒a,b是一些寶石串,「+」表示連線操作。s中有k+1個a和k個b組成。a和b可能是空串。

現在給出寶石串,問怎麼切前幾個才能得到乙個漂亮的寶石項鍊。他切下來之後不會改變寶石的順序。

樣例解釋:

在這個樣例中前6個可以組成漂亮的串( a="", b="bca")。前7個也可以(a="b", b="ca")。

input

單組測試資料。

第一行有兩個整數n, k (1≤n,k≤1 000 000),表示寶石串原始的長度和在上文中提到的引數k。

第二行有n個由小寫字母組成的串,表示原始寶石串。

output

輸出一行有n個01組成的字串。第i(1≤i≤n)個位置是1的時候表示前i個寶石可以組成漂亮的寶石項鍊。
input示例

樣例輸入1

7 2bcabcab

output示例

樣例輸出1

0000011

那麼,很顯然這是kmp比較難的題。

(因為我最開始想了暴力,然而看了資料範圍emmmmmm……)

這裡我們可以將原串分為兩種串s與t。

那麼可能會將其分為sss……sss或sss……ssst

對於第一種情況,顯然我們可求s的個數num(num=n/(n-nxt[n]))(請見上篇文章

)那麼num/k就是abab……baba中ab所包含的s的個數,自然的num%k就是a所包含的s的個數。

由於b可空,所以num/k>=num%k。

對於第二種情況,思考一下發現num的求法同上。

那麼我們將a=t,b=(s-t)+sss……sss。

ab的s個數仍然是num/k,t的s個數仍然是num%k。

但是t!=s,所以num/k>num%k

(ps.本題輸出量巨大,請使用快速的輸出方式)

#include#include

using

namespace

std;

const

int n=1e6+5

;char

s[n];

intnxt[n];

char

ans[n];

void getnext(int

m)

return;}

intmain()

}else}}

ans[m]=0

; puts(ans);

return0;

}

51nod1554 歐姆諾姆和項鍊

1554 歐姆諾姆和項鍊 codeforces 基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 有一天,歐姆諾姆發現了一串長度為n的寶石串,上面有五顏六色的寶石。他決定摘取前面若干個寶石來做成乙個漂亮的項鍊。他對漂亮的項鍊是這樣定義的,現在有一條項鍊s,當s a ...

51nod1554 歐姆諾姆和項鍊 kmp

有一天,歐姆諾姆發現了一串長度為n的寶石串,上面有五顏六色的寶石。他決定摘取前面若干個寶石來做成乙個漂亮的項鍊。他對漂亮的項鍊是這樣定義的,現在有一條項鍊s,當s a b a b a a b a的時候是漂亮的,這兒a,b是一些寶石串,表示連線操作。s中有k 1個a和k個b組成。a和b可能是空串。現在...

51nod 1554 歐姆諾姆和項鍊 題解

給定乙個長度為n 1 e6 n 1e6 n 1 e6 的字串s ss,和乙個k 1 e6 k 1e6 k 1 e6 定義乙個字串是漂亮的,當且僅當它珂以表示為恰好k 1 k 1k 1個aa a中間夾著k kk個b bb,a,b a,ba,b為任意字串 珂以為空 對於s ss的每個字首,求它是否是漂亮...