• HDU 2609 How many


    How many

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 2870    Accepted Submission(s): 1241


    Problem Description
    Give you n ( n < 10000) necklaces ,the length of necklace will not large than 100,tell me
    How many kinds of necklaces total have.(if two necklaces can equal by rotating ,we say the two necklaces are some).
    For example 0110 express a necklace, you can rotate it. 0110 -> 1100 -> 1001 -> 0011->0110.
     
    Input
    The input contains multiple test cases.
    Each test case include: first one integers n. (2<=n<=10000)
    Next n lines follow. Each line has a equal length character string. (string only include '0','1').
     
    Output
    For each test case output a integer , how many different necklaces.
     
    Sample Input
    4
    0110
    1100
    1001
    0011
    4
    1010
    0101
    1000
    0001
    Sample Output
    1
    2
    最小表示法,每个都弄到字典序最小,存到map中,输出map的大小就可以了。
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <map>
    #include <set>
    #include <vector>
    #include <queue>
    using namespace std;
    typedef long long ll;
    string a;
    int len,n;
    string check(string a,int len)
    {
      int i=0,j=1,k=0;
      while(i<len && j<len && k<len)
      {
        int t=a[(j+k)%len]-a[(i+k)%len];
        if(t==0) k++;
        else
        {
          if(t<0) i+=k+1;
          else j+=k+1;
          if(i==j) j++;
          k=0;
        } 
      }
      int minn=min(i,j);
      int cnt=0;
      string ans;
      while(cnt<len)
      {
        ans+=a[(cnt+minn)%len];
        cnt++;
      }
      return ans;
    }
    int main()
    {
      map<string,int>m;
      while(cin>>n)
      {
        while(n--)
        {
          cin>>a;
          len=a.size();
          string s=check(a,len);
          m[s]=1;
        }
        printf("%d
    ",m.size());
        m.clear();
      }
      return 0;
    }
  • 相关阅读:
    字符编码与解码详解
    【Java反射机制】用反射改进简单工厂模式设计
    数据结构
    根据 中序遍历 和 后序遍历构造树(Presentation)(C++)
    【动态规划】记忆搜索(C++)
    Linux环境下安装中山大学东校区iNode客户端
    webpack前端开发环境搭建
    CSS中line-height继承问题
    MySQL中MyISAM与InnoDB的主要区别对比
    JavaScript中易混淆的DOM属性及方法对比
  • 原文地址:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/7144990.html
Copyright © 2020-2023  润新知