列表

详情


NC232300. 英语作文

描述

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

输入描述

第一行两个整数,为nk
第二行n个由仅小写字母组成的单词。每个单词长度小于等于10

输出描述

一行一个正整数,表示有多少对单词中间间隔的单词数小于等于k

示例1

输入:

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

输出:

2

说明:

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

示例2

输入:

10 2
a a a a a a a a a a

输出:

24

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 137ms, 内存消耗: 9640K, 提交时间: 2023-08-12 10:25:33

#include<bits/stdc++.h>
using namespace std;
string a[100005];
int main(){
	int n,k,i;
	long long sun=0;
	cin>>n>>k;
	map<string,int>m;
	for(i=1;i<=n;i++)
	{
		cin>>a[i];
		sun=sun+m[a[i]];
		m[a[i]]++;
		if(i>k+1)
		m[a[i-k-1]]--;
	}
	cout<<sun<<endl;
}

Python3 解法, 执行用时: 210ms, 内存消耗: 15388K, 提交时间: 2023-08-12 10:25:12

n,k=list(map(int,input().split()))
a=input().split()
d={}
ans=0
for i in range(n):
    if a[i] in d:
        ans+=d.get(a[i])
        d[a[i]]+=1
    else:
        d[a[i]]=1
    if i-k-1>=0:
        d[a[i-k-1]]-=1
print(ans)

上一题