该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
题目描述
01 串指的是只有 0,1 组成的串。对于一个 01 串a1⋯n,它的逆序对是指这样的 (i,j) ,满足 1≤i<j≤n 且ai>aj。如果一个 01 串的逆序对数量为奇数,则称它是一个
好串。例如,串 1010 有 3 个逆序对,它是一个好串;而串 0100 有 2 个逆序对,
它不是一个好串。
定义这样一个函数f:对于一个 01 串s,如果s可以写成t1t2…tk的形式(即k个串依次连接),并且所有ti都是好串,那么定义f(s) 的值为这样的最小的k;否则,定义f(s)=0。
例如:f(1010)=1,因为 1010 本身是一个好串。f(101010)=2,因为 101010本身不是好串,但它可以拆成 101 和 010。f(110)=0,因为它无法写成若干个好串的连接。
现在有一个长为n的 01 串s,它共有 2n−1 个非空子序列。你需要计算这些串的f值之和,模109+7。
输入格式
一行一个长度为n的 01 串。
输出格式
输出一个数,表示答案。
01010010
148
010010101010101010010101101010101
421025972
样例输入输出 3
见下发文件。
数据规模
共 10 个测试点。
测试点 1 满足n≤10。
测试点 2,3 满足n≤20。
测试点 4,5,6 满足n≤103。
对于所有数据,满足 1≤n≤105。
附件
附件下载