栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c-英语作文(牛客新生赛)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c-英语作文(牛客新生赛)

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

在写英语作文的时候,两个相同单词靠的太近肯定不好。现在 ZHR 给了你一段nnn个单词的英文,问你有多少对相同单词中间间隔的单词数小于等于kkk 。

输入描述:
第一行两个整数,为nnn 和 kkk 。

第二行nnn个由仅小写字母组成的单词。每个单词长度小于等于101010 。

1≤k≤n≤1051le k le n le 10^51≤k≤n≤105。

输出描述:
一行一个正整数,表示有多少对单词中间间隔的单词数小于等于kkk 。

示例1

输入

复制11 2 i love you you love mi mixue ice cream and tea

11 2
i love you you love mi mixue ice cream and tea
输出

复制2

2
说明
只有 you 和 love 两个单词间隔的单词数小于等于222

示例2

输入

复制10 2 a a a a a a a a a a

10 2
a a a a a a a a a a
输出

复制24

24

 思路:用map >,一个存他的单词,一个存他的下标,把他的下标存进vector里。在加入一个数的下标i前先判断他的vector数组里有没有数,如果有,说明前面有与他相同的单词,就找到他最左能到的下标i-k+1这个数在vector数组中的下标,然后用他最右边的数的下标减去他最左能到的下标,就是能与他配对的个数。

注意:最后结果用longlong存,如果用int只能通过百分之九十的实例。

#include
#include
#include
#include
using namespace std;

int main(){
	int n,k;
	long long con=0;
	scanf("%d%d",&n,&k);
	map > a;
	for(int i=1;i<=n;i++){
		string s;
		cin>>s;
		if(a[s].size()!=0){
			int q=lower_bound(a[s].begin(),a[s].end(),i-k-1)-a[s].begin();
			con+=a[s].size()-q;
	}
	a[s].push_back(i);
	} 
	printf("%lld",con);
	return 0;
} 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/779544.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号