zoukankan      html  css  js  c++  java
  • 15年第六届蓝桥杯第七题_手链样式_(stl_string)


    手链样式

    小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙。
    他想用它们串成一圈作为手链,送给女朋友。
    现在小明想知道:如果考虑手链可以随意转动或翻转,一共可以有多少不同的组合样式呢?

    请你提交该整数。不要填写任何多余的内容或说明性的文字。


    结果填空不需要太在意时间复杂度,几秒十几秒出都能接受。

    这个题,主要运用stl中的string.find(str),next_permutation(str.begin(),str.end()),reverse(str.begin,str.end())。

    在一个vector中存下已经出现过的排列,每一个排列先在vector中查找是否已存在该排列,若不存在,则res++,并将str+str(可任意转动)和reverse(str.begin(),str.end()) (可任意翻转) 压入vector。这样的话,比较花时间,但是可以接受。

    #include<iostream>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<vector>
    using namespace std;
    
    vector<string> vec;
    int main()
    {
        string str="AAABBBBCCCCC";
        int res=0;
        do
        {
            int flag=1;
            for(int i=0;i<vec.size();i++)
            {
                if(vec[i].find(str)!=string::npos)
                {
                    flag=0;
                    break;
                }
            }
            if(flag)
            {
                res++;
                string tmp=str+str;
                vec.push_back(tmp);
                reverse(tmp.begin(),tmp.end());
                vec.push_back(tmp);
            }
        }while(next_permutation(str.begin(),str.end()));
        cout<<res<<endl;
        return 0;
    }
  • 相关阅读:
    seaborn基础整理
    matplotlib基础整理
    pandas基础整理
    numpy基础整理
    二分算法的应用——不只是查找值!
    二分算法的应用——Codevs 1766 装果子
    数据挖掘实战(二)—— 类不平衡问题_信用卡欺诈检测
    数论:素数判定
    MySQL学习(二)——MySQL多表
    MySQL学习(一)——Java连接MySql数据库
  • 原文地址:https://www.cnblogs.com/jasonlixuetao/p/6667767.html
Copyright © 2011-2022 走看看