手链样式( 使用全排列函数next_permutation)
2016-03-14 16:19
645 查看
原题:手链样式
小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙。
他想用它们串成一圈作为手链,送给女朋友。
现在小明想知道:如果考虑手链可以随意转动或翻转,一共可以有多少不同的组合样式呢?
请你提交该整数。不要填写任何多余的内容或说明性的文字。
小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙。
他想用它们串成一圈作为手链,送给女朋友。
现在小明想知道:如果考虑手链可以随意转动或翻转,一共可以有多少不同的组合样式呢?
请你提交该整数。不要填写任何多余的内容或说明性的文字。
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <cmath> #include <vector> #include <algorithm> #include <map> const int N = 1001; using namespace std; typedef __int64 LL; map<LL,int> m; int cnt[20] = {1,1,1,2,2,2,2,3,3,3,3,3}; bool solve(int a[]) { for(int i=0;i<12;i++) { LL tmp = 0; for(int j = i;j<12;j++) { tmp = tmp *10 + a[j]; } for(int j = 0;j<i;j++) tmp = tmp *10 + a[j]; //printf("%I64d\n",tmp); if(m[tmp]){} else { m[tmp] = 1; return true; } } LL tmp = 0; for(int i=11;i>=0;i--) tmp = tmp *10 + a[i]; if(m[tmp]){} else { m[tmp] = 1; return true; } return false; } int main() { int ans = 0; //solve(cnt); while(next_permutation(cnt,cnt+12)) { LL tmp = 0; for(int i=0;i<12;i++) { tmp = tmp * 10 + cnt[i]; } //printf("%I64d\n",tmp); if(solve(cnt)) { ans++; } } printf("%d\n",ans); return 0; }
相关文章推荐
- Sass mixin 使用css border属性画三角形
- dispaly:table布局
- 2016.3.14__CSS 盒模型_第四天
- css3中-moz、-ms、-webkit分别代表的意思
- css height:100%失效
- css: position 与 z-index 问题(2)
- css:position 与 z-index 问题(1)
- css3(border-radius) 边框圆角详解
- css文本换行
- css学习任务二:切图写代码
- 【2016年Esri开发者大会亮点解析】矢量切片大显威力,GitHub上提供样式编辑器
- CSS入门笔记 - 初识CSS
- CSS3属性之text-overflow:ellipsis详解
- CSS学习笔记
- CSS选择器
- 导航条navigationBar上中间标题title 文字的样式
- CSS选择器
- 导入外部css文件时link和@import的区别
- css和js引用的相对路径
- css3中webkit-box的用法