15年第六届蓝桥杯第七题_手链样式_(stl_string)
2017-04-05 10:57
204 查看
手链样式
小明有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。这样的话,比较花时间,但是可以接受。
小明有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; }
相关文章推荐
- 第六届蓝桥杯A组C/C++ 第七题 手链样式
- 15年第六届蓝桥杯第七题_(string)
- 第六届 蓝桥杯 第七题 手链样式 枚举 暴力 解题报告
- 第六届蓝桥杯A组C/C++ 第七题 手链样式
- 第六届蓝桥杯-手链样式
- 2015年蓝桥杯C/C++A组第七题 手链样式
- 2015 第六届 蓝桥杯省赛 手链样式
- 第六届蓝桥杯C/C++B组第七题 牌型种数(回溯)
- 15年第六届蓝桥杯 c/c++ b组 题解(更新中)
- 2015年第六届蓝桥杯省赛(C/C++ B组)第七题
- 蓝桥杯_手链样式(排列)
- 蓝桥杯 手链样式 (枚举)
- 第六届蓝桥杯 软件类省赛真题 第七题:加法变乘法
- 【等价类计数】(2015)第六届蓝桥杯省赛 C/C++ A组 题解(第七题)
- 2015第6届蓝桥杯A组第7题 手链样式 题解
- 手链样式 --蓝桥杯
- 蓝桥杯 手链样式 枚举
- 第七届蓝桥杯b组第七题-剪邮票 题解二(全排列stl)
- 蓝桥杯 手链样式(暴力)
- 2015-年蓝桥杯C-(A组)赛题-dfs-手链样式