码迷,mamicode.com
首页 > 其他好文 > 详细

[字符串]联系 Contact

时间:2017-06-11 13:02:25      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:...   printf   i++   输出   ble   https   class   tac   方式   

题目链接

思考

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

标签:...   printf   i++   输出   ble   https   class   tac   方式   

原文地址:http://www.cnblogs.com/OIerLYF/p/6984791.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!