zoukankan      html  css  js  c++  java
  • poj 1200 crasy search

    https://vjudge.net/problem/POJ-1200

    题意:

    给出一个字符串,给出子串的长度n和给出的字符串中不同字符的个数nc,统计这个字符串一共有多少不同的长度为n的子串。

    思路:

    太菜了,还是看着题解做的。最开始根本不知道nc有何用。。。既然最多只有nc个不同的字符,那么就可以把每一个子串转化为一个nc进制的数,然后再把这个数转化为10进制数,之后统计一共有多少个不同的10进制数就可以了啊。

    代码:

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 const int maxn = 16000005;
     5 
     6 bool vis[maxn];
     7 int a[400];
     8 char s[maxn];
     9 
    10 int main()
    11 {
    12     int n,nc;
    13 
    14     while (scanf("%d%d%s",&n,&nc,s) != EOF)
    15     {
    16         memset(vis,0,sizeof(vis));
    17         memset(a,0,sizeof(a));
    18 
    19         int len = strlen(s);
    20 
    21         int sum = 0;
    22 
    23         for (int i = 0;i <= len;i++)
    24         {
    25             char c = s[i];
    26 
    27             if (!a[c])
    28             {
    29                 a[c] = ++sum;
    30             }
    31         }
    32 
    33         int ans = 0;
    34 
    35         for (int i = 0;i <= len - n;i++)
    36         {
    37             int num = 0;
    38 
    39             for (int j = 0;j < n;j++)
    40             {
    41                 char c = s[i+j];
    42 
    43                 num  = num * nc + (a[c] - 1);
    44             }
    45 
    46             if (!vis[num])
    47             {
    48                 vis[num] = 1;
    49                 ans++;
    50             }
    51         }
    52 
    53         printf("%d
    ",ans);
    54     }
    55 
    56     return 0;
    57 }
  • 相关阅读:
    hdu 1086 You can Solve a Geometry Problem too 求n条直线交点的个数
    2019 上半年 南昌网络赛
    第十章 存储过程和函数
    第九章 Mysql函数
    第八章 Mysql运算符
    第七章 插入、更新与删除数据
    第六章 查询数据
    第五章 触发器
    第四章 视图
    第三章 索引
  • 原文地址:https://www.cnblogs.com/kickit/p/7237851.html
Copyright © 2011-2022 走看看