zoukankan      html  css  js  c++  java
  • POJ 1200 Crazy Search 【hash】

    <题目链接>

    题目大意:

    给定n,nc,和一个字符串,该字符串由nc种字符组成,现在要你寻找该字符串中长度为n的子字符串有多少种。

    解题分析:

    因为要判重,所以讲这些字符串hash一下,将不同的字符串映射为数字,这里我们是将该字符串转化为nc进制数,不同的字符串分别对应nc进制下不同的数。

     1 #include <cstdio>
     2 #include <cstring>
     3 using namespace std;
     4 const int M =16e6+10;
     5 char str[M];
     6 bool hash[M];
     7 int cur[256];
     8 
     9 int main(){
    10     int n,nc;
    11     while(scanf("%d%d%s",&n,&nc,str)!=EOF){
    12         int cnt=0;
    13         memset(cur,0,sizeof(cur));
    14         memset(hash,false,sizeof(hash));
    15         int len=strlen(str);
    16         for(int i=0;i<len;i++){    //给所有字符都分配编号 
    17             if(!cur[str[i]])   
    18                 cur[str[i]]=++cnt;
    19             if(cnt==nc)break;
    20         }
    21         int ans=0;
    22         for(int i=0;i+n-1<len;i++){
    23             int sum=0;
    24             for(int j=i;j<i+n;j++){
    25                 sum+=sum*nc+cur[str[j]];   //得到该字符串转化为nc进制数的值 
    26             }
    27             if(!hash[sum]){
    28                 ++ans;
    29                 hash[sum]=true;
    30             }
    31         }
    32         printf("%d
    ",ans);
    33     }
    34     return 0;
    35 }

    2018-10-30

  • 相关阅读:
    JS 字符串
    JS 变量
    JS 数据类型与运算符
    HTML加载动画实现
    DOM Document.readyState 属性
    html中怎么去掉input获取焦点时候的边框
    原生js获取子元素
    CSS3 Animation动画
    slice,substr和substring的区别
    a链接嵌套无效,嵌套链接最优解决办法
  • 原文地址:https://www.cnblogs.com/00isok/p/9880343.html
Copyright © 2011-2022 走看看