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 ...
 
随机推荐
- C#  实现快捷键几种方法
			
本文讲解了三种方法实现C# button快捷键,如Alt + *(按钮快捷键),Ctrl+*及其他组合键等. 一. C# button快捷键之第一种:Alt + *(按钮快捷键) 在大家给button ...
 - Rails通过页面Debug
			
<%= debug(headers) %>--在视图中显示伴随请求的头部信息 <%= debug(params) %>--在视图中显示请求中的参数 <%= debug(a ...
 - Weblogic wls RCE 漏洞验证POC
			
#!/usr/bin/env python # coding:utf-8 # @Date : 2017/12/22 17:11 # @File : weblogic_poc.py # @Author ...
 - Windows下.svn文件夹的最简易删除方法(附linux)
			
如果想删除Windows下的.svn文件夹,通过手动删除的渠道是最麻烦的,因为每个文件夹下面都存在这样的文件.下面是一个好办法:建立一个文本文件,取名为kill-svn-folders.reg(扩展名 ...
 - 解决CentOS遇到Qt编译(error: cannot find -lGL)
			
笔者CentOS 6.5 64位,安装完成Qt5.5.1.随意新建一个Qt Widgets Application. 结果遇到Qt编译问题,提示信息如下: error: cannot find -lG ...
 - siciyuan开源项目观光指南
			
观光方式: 1.从UI到后台,先针对每个界面UI观察结构 2.再观察如何初始化和注入数据 3.针对2所用的后台方法进行概览 4.对3中方法进行深入研究 5.选择一个模块进行重写 6.重复5,搭建大体框 ...
 - PHP处理密码的几种方式
			
在 PHP中,经常会对用户身份进行认证.本文意在讨论对密码的处理,也就是对密码的加密处理. 1.MD5 相信很多PHP开发者在最先接触PHP的时候,处理密码的首选加密函数可能就是MD5了,我当时就是这 ...
 - php 如何禁用eval() 函数实例详解
			
在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险并经常会出现一些问题,今天我们就一起来看看eval函数对数组的操作及php 如何禁用eval() 函数: <?php $ ...
 - google浏览器:Ignored call to 'confirm()'. The document is sandboxed, and the 'allow-modals' keyword is not set
			
最近做一个功能,测试环境测试没问题,google浏览器测试也没问题,结果上生产发现google浏览器竟然用不了.查看控制台发现控制台报错: Ignored call to 'confirm()'. T ...
 - 杭电acm 1108题
			
这是一道求两个整数最大公倍数的问题,题目比较简单.... 直接使用穷举法计算,数据不是很大.... #include "iostream" using namespace std; ...