20分RE求助(悬2关)
查看原帖
20分RE求助(悬2关)
1055005
aaa_lvzekai楼主2023/9/30 11:29

rt.

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,k,now,sum,ans,daan;
vector<pair<string,ll>> cnt;
vector<string> all;
string a,tmp;
unordered_map<string,ll> mp;
bool cmpcmp(string x,string y)
{
	if(x.size()==y.size())
	{
		for(int i=0;i<(ll)x.size();i++)
		{
			if(x[i]==y[i])
			{
				continue;
			}
			return x[i]<y[i];
		}
	}
	return x.size()<y.size();
}
bool cmp(pair<string,ll> x,pair<string,ll> y)
{
	if(x.second==y.second)
	{
		return cmpcmp(x.first,y.first);
	}
	return x.second>y.second;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m>>k;
	while(cin>>tmp)
	{
		a+=tmp;
	}
	for(int i=n;i<=m;i++)
	{
		for(int j=0;j<=(ll)a.size()-i;j++)
		{
			tmp=a.substr(j,i);
			all.push_back(tmp);
			mp[tmp]++;
		}
	}
	for(int i=0;i<(ll)all.size();i++)
	{
		cnt.push_back({all[i],mp[all[i]]});
	}
	sort(cnt.begin(),cnt.end(),cmp);
	for(int i=0;i<(ll)cnt.size();i++)
	{
		if(cnt[i]==cnt[i-1])
		{
			continue;
		}
		if(cnt[i].second!=now)
		{
			if(ans==k)
			{
				break;
			}
			now=cnt[i].second;
			if(i!=0)
			{
				cout<<"\n";
			}
			cout<<now<<"\n";
			ans++;
			sum=1;
			cout<<cnt[i].first;
		}
		else
		{
			if(sum==6)
			{
				cout<<"\n";
			}
			cout<<" "<<cnt[i].first;
			sum++;
		}
	}
	return 0;
}
2023/9/30 11:29
加载中...