快手2020校园招聘秋招笔试--工程C试卷(21题)滑动窗口解决字串
病毒检测
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32M,其他语言64M
小明最近在做病毒自动检测,他发现,在某些library 的代码段的二进制表示中,如果包含子串并且恰好有k个1,就有可能有潜在的病毒。library的二进制表示可能很大,并且子串可能很多,人工分析不可能,于是他想写个程序来先算算到底有多少个子串满足条件。如果子串内容相同,但是开始或者结束位置不一样,则被认为是不同的子串。
注:子串一定是连续的。例如"010"有6个子串,分别是 "0, “1”, “0”, “01”, “10”, “010”
输入描述:
第一行是一个整数k,表示子串中有k个1就有可能是病毒。其中 0 <= k <= 1 000 000
第二行是一个字符串,就是library的代码部分的二进制表示。字符串长度 <= 1 000 000。并且字符串中只包含"0"或"1".
输出描述:
输出一个整数,所有满足只包含k个1的子串的个数。
输入例子1:
1
1010输出例子1:
6例子说明1:
满足条件的子串有:"1", "1", "10", "01", "10", "010".
输入例子2:
2
01010输出例子2:
4例子说明2:
满足条件的子串有: "101", "0101", "1010", "01010".
/*
思路: 使用两个辅助vector,一个记录1的位置v1,一个记录某个1的前面0的数量v2,
用一个长度为k的窗口在v1上滑动,满足条件的子串的数量与窗口首尾位置对应的v2记录的0的数量相关,
将每一个窗口的结果相加即可。结果应该设置成long long类型,有一个测试用例有很多0。
*/
#include<bits/stdc++.h>
using namespace std;
int main()
{int k;string str;cin>>k>>str;vector<int> keysindex;//存放每一个1的索引位置;vector<int> keyszeros;//存放每一个1前0的个数;int czeros=0;for(int i=0;i<str.size();i++){if(str[i]=='0')czeros++;else if(str[i]=='1'){keysindex.push_back(i);keyszeros.push_back(czeros);czeros=0;}}if(czeros>0)keyszeros.push_back(czeros);elsekeyszeros.push_back(0);long long sums=0;if(k==0){long long temp;//换成long longfor(int i=0;i<keyszeros.size();i++){temp=keyszeros[i];sums += temp*(temp+1)/2;// temp=((long long)keyszeros[i]*(keyszeros[i]+1)/2); sums+=temp;//注意这样写一定要强制转换,因为右边可能超过int的范围}}else if(keysindex.size()<k)sums=0;else{int i=0,j=k;while(j<keyszeros.size()){int tmp=(keyszeros[i]+1)*(keyszeros[j]+1);sums += tmp;i++;j++; }}cout<<sums<<endl;return 0;
}
快手2020校园招聘秋招笔试--工程C试卷(21题)滑动窗口解决字串相关推荐
- 快手2020校园招聘秋招笔试--工程C试卷 (编程题题解全)
1.病毒检测 滑动窗口题 例子: 2 0101010(第一位下标为1) 1)找到第一个最短的满足k条件的子串,即s[2~4],l=2,r=4 2)找出这个子串左右连续的0的个数,分别为a,b,则对于这 ...
- 快手2020校园招聘秋招笔试--工程A试卷 (编程题题解全)
"好序列"的个数 反着求,先求出所有序列个数,再减去不符合的个数. 黑边把图分成一个,一个的连通分量. 所以我们只要用dfs求出每个不包含黑边的连通分量的包含点个数sz,sz^k就 ...
- 快手2020校园招聘秋招笔试--工程B试卷
攻击者使用无效IP地址,利用TCP连接的三次握手过程,连续发送会话请求,使受害主机处于开放会话的请求之中,直至连接超时,最终因耗尽资源而停止响应.这种攻击被称为 A. DNS欺骗攻击 B. DDoS攻 ...
- 快手2020校园招聘秋招笔试--工程A试卷
1.(计算机网络原理)若用斜杠记法标识子网掩码,则255.255.240.0对应于 B A. /19 B. /20 C. /21 D. /22 解析 255.255.240.0转换为二进制为11111 ...
- 快手2020校园招聘秋招笔试--工程B试卷 订正
1.三种攻击 DNS欺骗攻击:冒充域名 把原来查询的IP改为其他IP ddos攻击:大量合法的服务器向某一目标不断发送请求,导致其他用户无法使用 SYN Flooding攻击:攻击者使用无效IP地址 ...
- 快手2020校园招聘秋招笔试--工程C试卷
1. 关于java的异常处理机制,以下说法正确的是: A. 当某个线程抛出OutOfMemoryError时,其他线程有可能不受影响 B. 当大量抛出RuntimeException时,不会影响系统的 ...
- 快手2020校园招聘秋招笔试--工程A试卷 题4
题意:中文题面自行理解 思路:处理出每块由红色边连成的连通块的点个数,ans=总方案数-所有只有红边相连的块的总方案数+只有黑边与之相连的点个数 代码: #include<bits/stdc++ ...
- 渣渣做后端真题-- 快手2020校园招聘秋招笔试--工程A试卷 选择题
真的是一枚渣渣,题在牛客网找的,有错误求大神指导,求一起做题的小伙伴,没写的题是我会的,有问题可以给我留言呀- A:记忆小Tips:4** 没有402(阿玛尼红管402 ,一只鲜艳的苹果红),5** ...
- 快手2020校园招聘秋招笔试--算法B试卷
四个编程题总体算比较简单,基本都在LeetCode出现过.但是我的速度太慢了,还要加油啊ヾ(◍°∇°◍)ノ゙ 牛客快手2020校园招聘秋招笔试–算法B试卷 合法数独 给定一个数独板的输入,确认当前的填 ...
最新文章
- 开源项目 eRedG4_V1.03.1发布
- Gallery简单应用
- 用枚举enum替代int常量
- python 实现队列功能 queue insert() pop()
- Win Api 有名管道通信--扫雷辅助(四)
- 在python中使用grpc和protobuf
- 从桌面到移动:异构计算翻天覆地的技术变革
- 华为tsm_台积电:如果不能向华为销售芯片,其他订单可快速取代华为空缺
- xxl子任务_XXL-JOB v2.1.2 发布,分布式任务调度平台
- 机器学习与计算机视觉(深度学习)
- 魅族使用华为鸿蒙,魅族官宣接入华为鸿蒙,以后我们还能用魅族自家的flyme系统吗?...
- 教你在Windows轻松修改Hosts文件
- sqlalchemy按月水平分表、python元类、动态映射表名automap_base\ 模型类
- 2010年总结机器人领域sci期刊杂志
- 移动网络安全_徐州市“移动杯”网络安全技能竞赛 即将开始!
- 华为跑了?深圳终究留不住华为
- 六度短网址服务平台原理
- jstack详细介绍
- 最新微信三级分销系统源码 分销商城搭建 含完整代码包和安装部署教程
- 一文读懂Uniswap V2的改进与创新