求助求助,除了#1都TLE
查看原帖
求助求助,除了#1都TLE
936120
1711Elegy楼主2023/11/17 14:55

这是代码

#include<bits/stdc++.h>
#include<string>
#include<vector>
#include<set>
#define repeat(i,x) for(int i=1;i<=x;i++)
using namespace std;
inline int read(){//快读 
	int x=0;bool k=true;
	char ch=getchar();
	while(!isdigit(ch)){
		if(ch=='-') k=false;
		ch=getchar();
	}
	while(isdigit(ch)){
		x=(x<<1)+(x<<3)+ch-'0';
		ch=getchar();
	}
	if(k) return x;
	else return ~(x-1);
}
set<int>s;//存放那些名字长度是存在的 
string ss;//读名字 
vector<int> name[300005];//存排名,二维vector的优化 
int n,k,ans;
int main(){
	n=read(),k=read();
	int maxm=-1;
	repeat(i,n){
		cin>>ss;
		int x=ss.size();
		s.insert(x);
		maxm=max(maxm,x);
		name[x].push_back(i);
	}
	for(set<int>::iterator it=s.begin();it!=s.end();it++){
		int i=*it;
		vector<int> &vv=name[i];
		for(int j=0;j<vv.size();j++){//遍历 
			for(int r=j+1;r<vv.size();r++){
				if(vv[r]-vv[j]<=k) ans++;
			}
		} 
	}
	cout<<ans;
}
2023/11/17 14:55
加载中...