zoukankan      html  css  js  c++  java
  • 单词分类

    【题目描述】

    当组成这两个单词的各个字母数量均相等时,这两个单词可以分为一类。

    例如“AABAC”和“CBAAA”归为一类,和“AAABB”不是一类。

    现有N个单词,所有单词均由大写字母组成,每个单词的长度不超过100,询问这些单词会被分成几类。

    【输入描述】

    第一行输入一个数;

    接下来N行,每行输入一个单词。

    【输出描述】

    输出一个数,表示答案。

    【样例输入】

    3

    AABAC

    CBAAA

    AAABB

    【样例输出】

    2

    【数据范围及提示】

    对于70%的数据,N ≤ 100;

    对于100%的数据,N ≤ 10000。

    源代码:
    
    #include<cstdio>
    #include<cstring>
    #define INF1 1000007
    #define INF2 10003
    struct Node
    {
        int T1,T2;
    }i[10001];
    int n,Num(0),Prime[26];
    void Euler() //欧拉筛法。
    {
        int Num(0);
        bool f[102]={0};
        for (int a=2;a<102;a++)
        {
            if (!f[a])
              Prime[Num++]=a;
            for (int b=0;b<Num&&a*Prime[b]<102;b++)
            {
                f[a*Prime[b]]=true;
                if (!(a%Prime[b]))
                  break;
            }
        }
    }
    int main() //一言不合双Hash。
    {
        Euler();
        scanf("%d",&n);
        getchar();
        for (int a=0;a<n;a++)
        {
            char S[101];
            bool T(0);
            gets(S);
            int Sum1=1,Sum2=1,Length=strlen(S);
            for (int a=0;a<Length;a++)
              Sum1=(Sum1*Prime[S[a]-'A'])%INF1;
            for (int a=0;a<Length;a++) //妈的最后一个点被卡了,那就双Hash,你不是很能吗。
              Sum2=(Sum2*Prime[S[a]-'A'])%INF2;
            for (int a=1;a<=Num;a++)
              if (Sum1==i[a].T1&&Sum2==i[a].T2)
              {
                T=true;
                break;
              }
            if (!T)
            {
                i[++Num].T1=Sum1;
                i[Num].T2=Sum2;
            }
        }
        printf("%d",Num);
        return 0;
    }
  • 相关阅读:
    规矩与管理
    信息系统叫设施比叫工具更贴近本义
    让ansbile和docker愉快的在一起
    elasearch基础教程
    markdown语法
    python 实用pickle序列化
    python 解析配置文件
    ansible状态管理
    haproxy官方配置文档地址
    ansible操作模块相关
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5971224.html
Copyright © 2011-2022 走看看