zoukankan      html  css  js  c++  java
  • HDOJ 2609 How many

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2609


    题目:

    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
     

    题意:
    多组输入
    给出若干字符串 字符串可以通过旋转循环相同 判断有多少不同的字符串
     
    思路:
    需要理解什么是旋转循环相同
    用到字符串中最小表示法的定义 可以求与某个字符串循环同构的字符串中 字典序最小的是哪一个
     
     

     
    代码:
    #include <bits/stdc++.h>
    
    using namespace std;
    const int maxn=110;
    int n;
    string s;
    map<string,int>mp;
    
    int getmin(int n){
        int i=0,j=1,k=0,t;
        while(i<n && j<n && k<n){
            t=s[(i+k)%n]-s[(j+k)%n];
            if(!t) k++;
            else{
                if(t>0) i+=k+1;
                else j+=k+1;
                if(i==j) j++;
                k=0;
            }
        }
        return i<j?i:j;
    }
    
    int main(){
        while(~scanf("%d",&n)){
            mp.clear();
            int ans=0;
            for(int i=1;i<=n;i++){
                cin>>s;
                int len=s.length();
                int k=getmin(len);
                string ss="";
                for(int j=0;j<len;j++){
                    ss+=s[(k+j)%len];
                }
                //cout<<ss<<endl;
                if(mp[ss]==0){
                    ans++;
                    mp[ss]=1;
                } 
            }
            printf("%d
    ",ans);
        }
        return 0;
    } 

     

  • 相关阅读:
    shell 学习笔记 LinuxShell脚本攻略(第2版)
    [六省联考2017]分手是祝愿
    [SDOI2010]粟粟的书架
    [CQOI2018]解锁屏幕
    [SCOI2007]最大土地面积
    CF369E Valera and Queries
    CF817F MEX Queries
    [HEOI2016/TJOI2016]求和
    [CQOI2018]九连环
    [HNOI2015]亚瑟王
  • 原文地址:https://www.cnblogs.com/whdsunny/p/11324506.html
Copyright © 2011-2022 走看看