#P3510. [POI 2010] JED-Ones

    ID: 2564 远端评测题 2000ms 125MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>2010单调队列POI哈希,HASH级数

[POI 2010] JED-Ones

Description

xx 是一个由 01\texttt{01} 组成的序列。一个 UFO 指的是序列中第一个 11 或者最后一个 11 且不和任何一个 11 相邻。例如 10001010\texttt{10001010} 有两个 UFO,1101011000\texttt{1101011000} 没有 UFO,1000\texttt{1000} 只有一个 UFO。

11nn 的数的二进制表示中 UFO 的总数为 sks(n)sks(n)。例如,sks(5)=5,sks(64)=59,sks(128)=122,sks(256)=249sks(5)=5, sks(64)=59, sks(128)=122, sks(256)=249.

我们需要处理非常大的数字。因此 nn 会用压缩的形式表示。设 xx 是一个正整数 x2x_2 是其二进制表示(最高位为 11),则该数的压缩形式 REP(x)REP(x) 为一个序列,表示连续相同数位的数量。例如:

REP(460288)=REP(11100000110000000002)=(3,5,2,9)REP(460288)=REP(1110000011000000000_2)=(3,5,2,9) REP(408)=REP(1100110002)=(2,2,2,3)REP(408)=REP(110011000_2)=(2,2,2,3)

已知 REP(n)REP(n),求 REP(sks(n))REP(sks(n))

Input Format

第一行有一个整数 kk,表示一个正整数 nn 的压缩形式。
接下来一行有 kk 个整数 x1,x2,,xkx _ 1, x _ 2, \cdots, x _ k,用空格分隔,表示 nn 的压缩形式的序列。保证 x1+x2++xk109x _ 1 + x _ 2 + \cdots + x _ k \le 10 ^ 9,也就是说 0<n<21090<n< 2 ^ {10 ^ 9}

Output Format

输出两行,第一行有一个正整数 ll,第二行有 ll 个正整数,用空格分隔,表示 sks(n)sks(n) 的压缩形式。

6
1 1 1 1 1 1
5
1 1 2 1 1