\(\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\)种旋转的置换

\[ans+=\sum_{i=0}^{n-1}3^{gcd(i,n)}
\]

这道题\(n≤24\) 所以可以直接写暴力的写法

接下来考虑翻转 至于翻转 我们需要讨论\(n\)的奇偶性

\(n\)为奇数时 当前的圆环可以选择穿过一个点的直线作为对称中心进行翻转

**对称的点必须相同 然后中间的那个点可以随便 **

同时每一个点作为对称点都存在相同数量的方案

所以答案是

\[3*3^{\lfloor \frac{n}{2}\rfloor}=3^{\lfloor \frac{n}{2}\rfloor +1}
\]

\(n\)为偶数时 当前的圆环可以选一条穿过两个点的直线或者一个点也没有穿过的直线作为对称轴

对于左图 我们可以选择\(\frac{n}{2}\)个点

**因为一个被选择的时候另一个也会被选择 ** 所以我们可以仅考虑\(\frac{n}{2}\)个点

还是**对称的点必须相同 然后中间的那两个点可以随便 **

对于右图 我们也是考虑\(\frac{n}{2}\)个空隙 理由同上

还是**对称的点必须相同 然后中间。。。。。。 **

\[\frac{n}{2}* (3*3*3^{\frac{n-2}{2}}+3^\frac{n}{2})=\frac{n}{2}*(3^\frac{n+2}{2}+3^\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的更多相关文章

  1. 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 ...

  2. 数学计数原理(Pólya):POJ 1286 Necklace of Beads

    Necklace of Beads Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7763   Accepted: 3247 ...

  3. POJ 1286 Necklace of Beads(项链的珠子)

    Necklace of Beads Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7874   Accepted: 3290 ...

  4. poj 1286 Necklace of Beads &amp; poj 2409 Let it Bead(初涉polya定理)

    http://poj.org/problem?id=1286 题意:有红.绿.蓝三种颜色的n个珠子.要把它们构成一个项链,问有多少种不同的方法.旋转和翻转后同样的属于同一种方法. polya计数. 搜 ...

  5. POJ 1286 Necklace of Beads(Polya简单应用)

    Necklace of Beads 大意:3种颜色的珠子,n个串在一起,旋转变换跟反转变换假设同样就算是同一种,问会有多少种不同的组合. 思路:正规学Polya的第一道题,在楠神的带领下,理解的还算挺 ...

  6. Necklace of Beads(polya计数)

    Necklace of Beads Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7451   Accepted: 3102 ...

  7. hdu 1817 Necklace of Beads(Polya定理)

    Necklace of Beads Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  8. POJ 1286 Pólya定理

    Necklace of Beads Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9162   Accepted: 3786 ...

  9. poj 1286 polya定理

    Necklace of Beads Description Beads of red, blue or green colors are connected together into a circu ...

随机推荐

  1. 【转】rails中的时区问题

    http://eric-gao.iteye.com/blog/1058197 解释4个时区设置的不同: config.active_record.default_timezoneconfig.time ...

  2. react-router4.x 实用例子(路由过渡动画、代码分割)

    react-router4.2.0实用例子 代码分割 官网上面写的代码分割是不支持create-react-app脚手架的,要使用import实现 创建一个bundle.js文件 import { C ...

  3. 11-24网页基础--Js框架及学习思路

    第一部分 基本语法: 1.数据类型(字符串.小数.整数.布尔.时间日期)var s="3.14" var n=parsefloat(s) s+=5;var s="abc3 ...

  4. 配置php的curl模块问题

    问题 checking for cURL in default path... not foundconfigure: error: Please reinstall the libcurl dist ...

  5. javaScript之NodeList

    NodeList对象 是DOM操作取出的集合(实际上是基于DOM结构动态查询的结果),用来保存一组有序的节点,可以通过位置来访问这些节点,它并不是array的实例. Nodelist最大的特点就是它的 ...

  6. koa的跨域访问

    koa跨域访问:1.安装插件 npm install koa-cors --save-dev2.项目的app.js中var cors = require('koa-cors'); app.use(co ...

  7. 27-1/x+1/y=1/n

    链接:https://www.nowcoder.com/acm/contest/90/F来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K ...

  8. java开发中用到的技术(持续更新.....)

    一.数据库 1.数据库连接池:当jdbc连接数据库使用DriverManager 获取时,每次向数据库建立连接的时候都要讲connection加载到内存中,当同时使用的用户数量较大时,会造成服务器不堪 ...

  9. 使用Elasticsearch-jdbc为MySQL数据库建立索引

    elasticsearch-jdbc 环境 Ubuntu 14.04 JDK 1.8.0_66 Elasticsearch 2.3.1 Elasticsearch-jdbc 2.3.1.0 Elast ...

  10. tftp命令详解

    TFTP协议简介TFTP是用来下载远程文件的最简单网络协议,它其于UDP协议而实现.嵌入式linux的tftp开发环境包括两个方面: 一是linux服务器端的tftp-server支持,二是嵌入式目标 ...