首页 > 学院 > 开发设计 > 正文

Eoj 2854 统计包含m个连续1子串的字符串的个数

2019-11-06 08:32:22
字体:
来源:转载
供稿:网友

统计特定字串模式的个数 Time Limit:1000MS Memory Limit:65536KB Total Submit:321 Accepted:173

Description

在0和1组成的长度为n(1≤n≤31)的字符串中,统计包含m(1≤m≤n)个连续1子串的字符串的个数。

Input

本题有多组测试数据。每组测试数据占一行,含n和m,表示字符串的长度和连续1的个数。n=-1和m=-1表示输入结束。

Output

对每组测试数据,在一行中输出统计出的字符串的个数。

Sample Input

1 1

2 1

3 1

4 3

10 3

10 5

20 10

20 15

31 20

31 1

-1 -1

Sample Output

1

3 7 3 520 112 6144 112 13312 2147483647

Notes

长度为4,包含3个连续1子串的字符串有3个:

0111,1110,1111

#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;int dp[35];int main(){ int n,m; while (~scanf("%d %d", &n, &m)) { if (n == -1 && m == -1) break; dp[0] = 1; for (int i = 1; i <= n; i++) { if (i < m) dp[i] = 2 * dp[i-1]; else if (i == m) dp[i] = 2 * dp[i-1] - 1; else dp[i] = 2 * dp[i-1] - dp[i-m-1]; } PRintf("%d/n",(int)pow(2,n)-dp[n]); } return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表