首页 > 代码库 > [字符串]联系 Contact
[字符串]联系 Contact
题目链接
思考
20W的字符串长度,我们可以先用for循环模拟出来,这个字符串所包含的 所有A,A+1,A+2...B-1,B长度的字符串,
之后按照规则排序,输出。
整体难度在于排序的实现和坑爹的输出。
吐槽:这个奇葩的读入方式我始终没搞懂。 while(cin>>f) s+=f就AC cin>>s输出就WA。
#include <cstdio>#include <map>#include <algorithm>#include <iostream>#include <cstring>#include <string>using namespace std;struct node{ string a; int Num; bool operator < (const node &fuck)const{ if(Num==fuck.Num){ if(a.length() == fuck.a.length() ) return a < fuck.a; else return a.length() < fuck.a.length(); } return Num > fuck.Num; }}Str[200010];int cnt,ans,tot,x,y,n;string f,s;map<string,bool>exi;map<string,int>num;int main(){ scanf("%d%d%d",&x,&y,&n); while(cin>>f) s+=f; for(register int i=0;i<=s.length()-1;i++){ for(register int j=x;j<=y;j++){ if(i+j > s.length()) continue; string ss = s.substr(i,j); //cout<<ss<<endl; if(!exi[ss]){ exi[ss]=1; num[ss]++; Str[++cnt].a=ss; } else num[ss]++; } } for(int i=1;i<=cnt;i++) Str[i].Num = num[Str[i].a]; sort(Str+1,Str+1+cnt); for(int i=1;i<=cnt;i++){ printf("%d\n",Str[i].Num); ans = 0; while(Str[i].Num==Str[i+1].Num){ cout<<Str[i].a; ans++; if(ans%6==0) printf("\n"); else printf(" "); i++; } cout<<Str[i].a<<endl; if(++tot==n) break; } return 0;}
[字符串]联系 Contact
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。