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

2021-09-29 21:36:10 字數 1894 閱讀 1925

給定乙個長度為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的每個字首,求它是否是漂亮的。輸出乙個長度為n

nn的01

0101

串表示答案。

栗子:當k=3

k=3k=

3時,字串s="

abza

bzab

"s="abzabzab"

s="abz

abza

b"就是漂亮的,在這裡,a="

ab",

b="z

"a="ab",b="z"

a="ab"

,b="

z"。求出迴圈節長度,設為c

cc,對於每一位,分兩種情況討論一下。

首先求出nex

tnext

next

,然後我們知道最長迴圈節長度就是c=i

−nex

t[i]

c=i-next[i]

c=i−ne

xt[i

]。設t=i

/c

t=i/c

t=i/c。

如果i

ii是c

cc的倍數,那麼我們如何把它弄成滿足條件的形式呢?

此時我們設a

aa由x

xx個c

cc組成,b

bb由y

yy個c

cc組成。那麼我們只需要使得(k+

1)x+

ky=t

(k+1)x+ky=t

(k+1)x

+ky=

t這個方程有自然數解即珂。整理,得:

k (x

+y)+

x=

tk(x+y)+x=t

k(x+y)

+x=t

。然後我們發現,顯然,x=t%k

t\%k

t%k,(x+

y)=t

/k

(x+y)=t/k

(x+y)=

t/k。由於y

yy是自然數,那麼x

<=(

x+y)

x<=(x+y)

x<=(

x+y)

。所以,這種情況只要t%k

<=t

/k

t\%k<=t/k

t%k<=t

/k即珂。另一種情況也容易得到,條件很類似,就是t%k

kt\%kt%

kk,區別只有取不取等。(其原因是,這種情況下,y

yy彷彿不能取000)

**:

#include

using

namespace std;

namespace flandre_scarlet

void

input()

int fail[n]

;void

getfail()

}void

soviet()

else

else

putchar

('0');

}}}#define flan void

flan ismywife()

}int

main()

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的寶石串,上面有五顏六色的寶石。他決定摘取前面若干個寶石來做成乙個漂亮的項鍊。他對漂亮的項鍊是這樣定義的,現在有一條項鍊s,當s a b a b a a b a的時候是漂亮的,這兒a,b是一些寶石串,表示連線操作。s中有k 1個a和k個b組成。a和b可能是空串...