• POJ 1200


    View Code
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 
     6 int hash[30];
     7 bool loc[20000000];
     8 char str[1000000];
     9 
    10 int main()
    11 {
    12     int n,m,cnt,sum,len,ans,i,j;
    13     while(scanf("%d%d",&n,&m)!=EOF)
    14     {
    15         memset(loc,0,sizeof(loc));
    16         memset(hash,0,sizeof(hash));
    17         scanf("%s",str);
    18         len=strlen(str);
    19         cnt=1;
    20         ans=0;
    21         for(i=0;i+n<=len;i++)
    22         {
    23             sum=0;
    24             for(j=i;j<i+n;j++)
    25             {
    26                 if(!hash[str[j]-'a'])
    27                 {
    28                     hash[str[j]-'a']=cnt++;
    29                 }
    30                 sum*=m;
    31                 sum+=hash[str[j]-'a'];
    32             }
    33             if(!loc[sum])
    34             {
    35                 loc[sum]=1;
    36                 ans++;
    37             }
    38         }
    39         printf("%d\n",ans);
    40     }
    41     return 0;
    42 }
    View Code
     1 //TLE,搞成单次输入也TLE,也许字符种类数没有用上
     2 //Huge input,scanf is recommended.
     3 #include <iostream>
     4 #include <set>
     5 #include <string>
     6 using namespace std;
     7 
     8 int main()
     9 {
    10      int i,j,k,T;
    11      int m,n;
    12      string s;
    13      set <string > sset;
    14      while(cin>>m>>n)
    15      {
    16           s.clear();
    17           sset.clear();
    18           cin>>s;
    19           int len = s.length();
    20           for(i=0;i<=len-m;i++)
    21           {
    22                string temp = s.substr(i,m);
    23                sset.insert(temp);
    24           }
    25           cout<<sset.size()<<endl;
    26      }
    27      return 0;
    28 }
    29                
    30           
    31           
    View Code
     1 //tle
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstring>
     5 #include <set>
     6 using namespace std;
     7 
     8 char str[16000010] ;
     9 char hash[300];
    10 
    11 int main()
    12 {
    13     int n,m,sum,len;
    14     int i,j,k,t;
    15     set <int > sset;
    16     while(scanf("%d%d",&n,&m)==2)
    17     { 
    18         memset(str,0,sizeof(str));
    19         memset(hash,0,sizeof(hash));
    20         sset.clear();
    21         scanf("%s",str);
    22         int cnt = 1;
    23         for(i=0;str[i+n-1]!='\0';i++)//不用strlen是为节省时间 
    24         {
    25             sum=0;
    26             for(j=i;j<i+n;j++)
    27             {
    28                 if(!hash[str[j]-'a'])
    29                 {
    30                     hash[str[j]-'a']=cnt++;
    31                 }
    32                 sum = sum*m + hash[str[j]-'a'];
    33             }
    34             sset.insert(sum);
    35         }
    36         printf("%d\n",sset.size());
    37     }
    38     return 0;
    39 }
    View Code
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <map>
     5 using namespace std;
     6 
     7 char str[16000010] ;
     8 char hash[300];
     9 
    10 int main()
    11 {
    12     int n,m,sum,len;
    13     int i,j,k,t;
    14     map <int,bool > mm;
    15     scanf("%d%d",&n,&m);
    16     { 
    17         int ans  = 0;
    18         memset(str,0,sizeof(str));
    19         memset(hash,0,sizeof(hash));
    20         mm.clear();
    21         scanf("%s",str);
    22         int cnt = 1;
    23         for(i=0;str[i+n-1]!='\0';i++)//不用strlen是为节省时间 
    24         {
    25             sum=0;
    26             for(j=i;j<i+n;j++)
    27             {
    28                 if(!hash[str[j]-'a'])
    29                 {
    30                     hash[str[j]-'a']=cnt++;
    31                 }
    32                 sum = sum*m + hash[str[j]-'a'];
    33             }
    34             //if(!mm.count(sum))
    35             if(!mm[sum])//军超时 
    36             {
    37                mm[sum] = 1;
    38                ans ++;
    39             }
    40         }
    41         printf("%d\n",ans);
    42     }
    43     return 0;
    44 }
  • 相关阅读:
    软件编写和设计中的18大原则
    Ubuntu CTRL+ALT+F1~F6 进入命令模式后不支持中文显示的解决办法
    BM串匹配算法
    KMP串匹配算法解析与优化
    mongodb随机查询一条记录的正确方法!
    这真的该用try-catch吗?
    计算机的本质与数值、文字、声音、图像
    编程语言的概念
    linux服务方式启动程序脚本(init.d脚本)
    linux的7种运行级别
  • 原文地址:https://www.cnblogs.com/hxsyl/p/2680681.html
Copyright © 2020-2023  润新知