[藍橋杯2015初賽]手鏈樣式


題目鏈接:http://oj.ecustacm.cn/problem.php?id=1254

 

題目描述

小明有3顆紅珊瑚,4顆白珊瑚,5顆黃瑪瑙。
他想用它們串成一圈作為手鏈,送給女朋友。
現在小明想知道:如果考慮手鏈可以隨意轉動或翻轉,一共有多少不同的組合樣式?

輸出

請你輸出該整數。不要輸出任何多余的內容或說明性的文字。

 

思想:

暴力枚舉,我們直接把每一次得到的串先復制拼接一下(模擬旋轉)成環,再翻轉一下,如果兩次得到的串在已得的串里面沒有就加入

 

#include <iostream>
#include <algorithm>
#include <string>
#include <string.h>
#include <vector>
#include <map>
#include <stack>
#include <set>
#include <queue>
#include <math.h>
#include <cstdio>
#include <iomanip>
#include <time.h>

#define LL long long
#define INF 0x3f3f3f3f
#define ls nod<<1
#define rs (nod<<1)+1

const int maxn = 1e5 + 10 ;
const LL mod = 20010905;

std::vector<std::string> v;

int main() {
    std::string str = "aaabbbbccccc";
    int sum = 0;
    do {
        std::vector<std::string>::iterator it;
        for (it = v.begin();it != v.end();it++) {
            if((*it).find(str, 0) != std::string::npos)
            {
                break;
            }
        }
        if (it != v.end())
            continue;
        std::string str2 = str + str;  //可以任意轉動的緣故
        v.push_back(str2);
        reverse(str2.begin(), str2.end());  //可以任意翻轉的緣故
        v.push_back(str2);
        sum++;
    }while(next_permutation(str.begin(), str.end()));
    printf("%d\n",sum);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM