給定乙個長度為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可能是空串...