暴力
code:
/*
ID: yueqi
PROG: contact
LANG: C++
*/
#include <map>
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL __int64
using namespace std;
bool cmp(const pair<int,string> &a,const pair<int,string> &b){
if (a.first > b.first) return true;
if (a.first < b.first) return false;
int an=a.second.size();
int bn=b.second.size();
if (an < bn) return true;
if (an > bn) return false;
return a.second < b.second;
}
string str="",tmp;
int A,B,N;
map<string ,int> m;
vector< pair<int,string> > v;
int main()
{
freopen("contact.in","r",stdin);
freopen("contact.out","w",stdout);
scanf("%d %d %d",&A,&B,&N);
//getchar();
while(getline(cin,tmp))
str+=tmp;
for(int len=A;len<=B;len++)
{
for(int i=0;i+len<=str.size();i++)
m[str.substr(i,len)]++;
}
for(map<string,int>::iterator it=m.begin();it!=m.end();it++)
{
v.push_back(make_pair(it->second,it->first));
}
sort(v.begin(),v.end(),cmp);
int Pt=0;
int Old=-1;
int counter=0;
int re=0;
while(Pt<v.size()){
if (v[Pt].first != Old){
if (re==N) break;
if (re!=0) printf("\n");
++re;
counter=0;
printf("%d\n%s",v[Pt].first,v[Pt].second.c_str());
Old=v[Pt++].first;
}
else{
counter++;
if (counter%6==0){
printf("\n%s",v[Pt].second.c_str());
}else printf(" %s",v[Pt].second.c_str());
++Pt;
}
}
printf("\n");
return 0;
}