Necklace of Beads POJ - 1286
\(\color{#0066ff}{ 题目描述 }\)
一个圈上有n个珠子,有三种颜色可以染,问本质不同的方案数(通过旋转和翻转重合的算一种)
\(\color{#0066ff}{输入格式}\)
多组数据,每次一个n,以-1结束
\(\color{#0066ff}{输出格式}\)
每组数据输出一行一个数表示方案数
\(\color{#0066ff}{输入样例}\)
4
5
-1
\(\color{#0066ff}{输出样例}\)
21
39
\(\color{#0066ff}{数据范围与提示}\)
\(n\le 23\)
\(\color{#0066ff}{题解}\)
---------------------以下内容来自lzxkj的md。。。。qwq主要是我懒得写
我们考虑一下存在多少种置换 旋转 翻转
首先我们可以讨论\(n\)种旋转的置换
\]
这道题\(n≤24\) 所以可以直接写暴力的写法
接下来考虑翻转 至于翻转 我们需要讨论\(n\)的奇偶性
\(n\)为奇数时 当前的圆环可以选择穿过一个点的直线作为对称中心进行翻转

**对称的点必须相同 然后中间的那个点可以随便 **
同时每一个点作为对称点都存在相同数量的方案
所以答案是
\]
\(n\)为偶数时 当前的圆环可以选一条穿过两个点的直线或者一个点也没有穿过的直线作为对称轴

对于左图 我们可以选择\(\frac{n}{2}\)个点
**因为一个被选择的时候另一个也会被选择 ** 所以我们可以仅考虑\(\frac{n}{2}\)个点
还是**对称的点必须相同 然后中间的那两个点可以随便 **
对于右图 我们也是考虑\(\frac{n}{2}\)个空隙 理由同上
还是**对称的点必须相同 然后中间。。。。。。 **
\]
最后一共是有\((2*n)\)个置换
下面是我的代码(_)
#include<cstdio>
#include<cctype>
#define LL long long
LL in() {
char ch; LL x = 0, f = 1;
while(!isdigit(ch = getchar()))(ch == '-') && (f = -f);
for(x = ch ^ 48; isdigit(ch = getchar()); x = (x << 1) + (x << 3) + (ch ^ 48));
return x * f;
}
LL ans, n, m = 3;
LL ksm(LL x, LL y) {
LL re = 1LL;
while(y) {
if(y & 1) re = re * x;
x = x * x;
y >>= 1;
}
return re;
}
LL gcd(LL x, LL y) { return y? gcd(y, x % y) : x; }
int main() {
while(~(n = in())) {
if(!n) {
puts("0");
continue;
}
ans = 0;
for(int i = 0; i < n; i++) ans += ksm(m, gcd(i, n));
if(n & 1) ans += m * n * ksm(m, (n - 1) >> 1LL);
else ans += (n >> 1LL) * (ksm(m, n >> 1LL) + m * m * ksm(m, (n - 2) >> 1LL));
ans /= (n << 1LL);
printf("%lld\n", ans);
}
return 0;
}
Necklace of Beads POJ - 1286的更多相关文章
- poj 1286 Necklace of Beads poj 2409 Let it Bead HDU 3923 Invoker <组合数学>
链接:http://poj.org/problem?id=1286 http://poj.org/problem?id=2409 #include <cstdio> #include &l ...
- 数学计数原理(Pólya):POJ 1286 Necklace of Beads
Necklace of Beads Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7763 Accepted: 3247 ...
- POJ 1286 Necklace of Beads(项链的珠子)
Necklace of Beads Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7874 Accepted: 3290 ...
- poj 1286 Necklace of Beads & poj 2409 Let it Bead(初涉polya定理)
http://poj.org/problem?id=1286 题意:有红.绿.蓝三种颜色的n个珠子.要把它们构成一个项链,问有多少种不同的方法.旋转和翻转后同样的属于同一种方法. polya计数. 搜 ...
- POJ 1286 Necklace of Beads(Polya简单应用)
Necklace of Beads 大意:3种颜色的珠子,n个串在一起,旋转变换跟反转变换假设同样就算是同一种,问会有多少种不同的组合. 思路:正规学Polya的第一道题,在楠神的带领下,理解的还算挺 ...
- Necklace of Beads(polya计数)
Necklace of Beads Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7451 Accepted: 3102 ...
- hdu 1817 Necklace of Beads(Polya定理)
Necklace of Beads Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- POJ 1286 Pólya定理
Necklace of Beads Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9162 Accepted: 3786 ...
- poj 1286 polya定理
Necklace of Beads Description Beads of red, blue or green colors are connected together into a circu ...
随机推荐
- leetcode628
这道题十分不容易啊,做到半夜. class Solution { public: static int cmp628(int a, int b) { return a > b; } static ...
- 【总结整理】dojo学习
Dojo Toolkit 的特性可以分到 4 个不同部分.这种划分使得开发人员可以将库大小保持到最小,确保应用程序性能不受大量 JavaScript 库下载的影响.例如,如果您只需要 Ajax 支持性 ...
- JavaScript语言精髓(1)之语法概要拾遗(转)
JavaScript语言精髓(1)之语法概要拾遗 逻辑运算 JavaScript中支持两种逻辑运算,“逻辑或(||)”和“逻辑与(&&)”,他们的使用方法与基本的布尔运算一致: v ...
- css知多少(4)——解读浏览器默认样式(转)
css知多少(4)——解读浏览器默认样式 上一节<css知多少(3)——样式来源与层叠规则>介绍了样式的五种来源,咱们再通过一张图回顾一下. 对于上面的三层,咱们大概都比较熟悉了.下面 ...
- SpringJdbc 【springjdbc的使用方法】
1 什么是springjdbc spring对jdbc的封装 2 使用SpringJdbc的编程步骤 2.1 导包 spring-jdbc : springjdbc的包 mysql : MySQL的驱 ...
- 【转】nginx的模块变量(HTTP核心模块变量)
nginx的HTTP核心模块引入了大量的变量,可以在指定范围内使用这些变量的值,可以分为三类:一是客户请求头中发送的变量.二是服务器端响应头中的变量,第三是nginx产生的各种变量,我们可以使用$变量 ...
- 3、PACBIO下机数据如何看
转载:http://www.cnblogs.com/jinhh/p/8328818.html 三代测序的下机数据都有哪些,以及他们具体的格式是怎么样的(以sequel 平台为主). 测序过程 SMRT ...
- UVA1723 Intervals
这题$n$倍经验…… 考虑差分约束: 我们设$s_i$表示$[-1, i]$这个区间中数字的种类数,那么一个条件的限制相当于$s_{b_i} - s_{a_i - 1} \leq c_i$,那么连边$ ...
- rest-framework组件 之 视图三部曲
浏览目录 使用混合(mixins) mixin类编写视图 使用通用的基于类的视图 viewsets.ModelViewSet 视图三部曲 使用混合(mixins) from rest_framewor ...
- apache的Base64编解码
import org.apache.commons.codec.binary.Base64; String Base64.encodeBase64URLSafeString(byte[]) byte ...