文章

28

粉丝

0

获赞

266

访问

6.5k

头像
全1字符串 题解:先把连续的1提取出来,再计算
P1916 清华大学2022年机试题
发布于2026年3月6日 11:06
阅读数 163

#include <iostream>
#include <vector> 
#include <string>
#include <algorithm>
using namespace std;

//计数函数
int count(string s, int m) {
	if(s.size() < m) return 0;
	else if(s.size() == m) return 1;
	else {
		int cnt = 0, len = m;
		while(len <= s.size()) {
			cnt += s.size() - len + 1;
			len++;
		}
		return cnt;
	}
}

int main() {
	int n, m;
	cin >> n >> m;
	string zero_one;
	cin >> zero_one;
	vector<string> str;
	int i = 0;
	//提取连续的1作为一个字符串放入str数组
	while(i < zero_one.size()) {
		if(zero_one[i] == '1') {
			string temp;
			while(i < zero_one.size() && zero_one[i] == '1')
				temp += zero_one[i++];
			str.push_back(temp);
		}
		i++;
	}
	//计算结果
	int res = 0;
	for(int i = 0; i < str.size(); i++)
		res += count(str[i],m);
	cout << res;
	return 0;	
}        

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发