暴力
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; }