Necklace of Beads

Description

Beads of red, blue or green colors are connected together into a circular necklace of n beads ( n < 24 ). If the repetitions that are produced by rotation around the center of the circular necklace or reflection to the axis of symmetry are all neglected, how many different forms of the necklace are there?

Input

The input has several lines, and each line contains the input data n.

-1 denotes the end of the input file.

Output

The output should contain the output data: Number of different forms, in each line correspondent to the input data.

Sample Input

4

5

-1

Sample Output

21

39

Solution

polya定理模板题

设\(\overline{G}\)是n个对象的一个置换群, 用m种颜色染图这n个对象,则不同的染色方案数为:

\[L=\frac{1}{|\overline{G}|}[m^{c(\overline{p_1)}}+m^{c(\overline{p_2)}}+...+m^{c(\overline{p_g)}}]
\]

其中 \(\overline{G}=\{\overline{p_1},\overline{p_2},...,\overline{p_g}\}\), \(c(\overline{p_k})\)为 \(\overline{p_k}\) 的循环节数(阶)

如对于n=4:

单位元:仅有(1)(2)(3)(4)一种情况,\((1)^4*1\)

考虑旋转\(\pm90^\circ\),有\((1234)^1\),\((1432)^1\)两种情况,\((4)^1*2\)

考虑旋转\(180^\circ\),有(13)(24)一种情况,\((2)^2*1\)

考虑以两个对立顶点为轴翻转,有(1)(3)(24),(2)(4)(13)两种情况,\((1)^2(2)^1*2\)

考虑以一不经过任一顶点但平分多边形的直径翻转,有(12)(34),(13)(24)两种情况,\((2)^2*2\)

所以答案为$$\frac{34+312+32+332+3^2*2}{1+2+1+2+2}=21$$


  • 考虑旋转,对于\(n\)个球的环旋转\(i\)个球的循环节的个数为\(gcd(n,i)\),这一部分快速幂求和

  • 考虑奇数的翻转,每次选择一个顶点作对称轴翻转,循环节数为\(\frac{n+1}{2}\)(自身不动,剩余两两交换),一共n种选择

  • 考虑偶数的翻转,可选对顶的两顶点作为对称轴旋转,循环节数为\(\frac{n+2}{2}\),(两顶点不动,剩余两两交换),\(\frac{n}{2}种选择\),选择无顶点的对称轴翻转,循环节数为\(\frac{n}{2}\)(全部两两交换),\(\frac{n}{2}\)种选择

#include <algorithm>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#if __cplusplus >= 201103L
#include <unordered_map>
#include <unordered_set>
#endif
#include <vector>
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define LONG_LONG_MAX 9223372036854775807LL
#define ll LL
using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int, int> P;
int n, m, k;
const int maxn = 1e5 + 10;
ll qpow(ll a, ll n)
{
ll res = 1;
while (n)
{
if (n & 1)
res *= a;
a *= a;
n >>= 1;
}
return res;
}
ll gcd(ll a, ll b) { return !b ? a : gcd(b, a % b); }
ll solve()
{
ll res = 0;
if (!n)
return res;
for (int i = 1; i <= n; i++)
{
res += qpow(3, gcd(n, i));
}
if (n & 1)
{
res += (ll)n * qpow(3, (n + 1) / 2);
}
else
{
res += (ll)(n / 2) * qpow(3, (n + 2) / 2);
res += (ll)(n / 2) * qpow(3, n / 2);
}
return res / (2 * n);
}
int main(int argc, char const *argv[])
{
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
while (cin >> n && n != -1)
{
cout << solve() << '\n';
}
return 0;
}

poj 1286 polya定理的更多相关文章

  1. POJ 1286 Pólya定理

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

  2. poj 2409(polya定理模板)

    题意:给你n种颜色和m个小球,问你有多少种不同的方案! 分析:作为模板.. 代码实现: #include <iostream> #include <cstdio> #inclu ...

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

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

  4. POJ 1286 Necklace of Beads(Polya定理)

    点我看题目 题意 :给你3个颜色的n个珠子,能组成多少不同形式的项链. 思路 :这个题分类就是polya定理,这个定理看起来真的是很麻烦啊T_T.......看了有个人写的不错: Polya定理: ( ...

  5. POJ 2409 Let it Bead(Polya定理)

    点我看题目 题意 :给你c种颜色的n个珠子,问你可以组成多少种形式. 思路 :polya定理的应用,与1286差不多一样,代码一改就可以交....POJ 1286题解 #include <std ...

  6. POJ 2409 Let it Bead:置换群 Polya定理

    题目链接:http://poj.org/problem?id=2409 题意: 有一串n个珠子穿起来的项链,你有k种颜色来给每一个珠子染色. 问你染色后有多少种不同的项链. 注:“不同”的概念是指无论 ...

  7. POJ 1286 【POLYA】

    题意: 给你三种颜色的珠子,每次给你N,问在旋转,翻转之后视作相同的情况下,能组成多少种不同的项链. 思路: 让我们借这道题拯救一下我对POLYA定理的理解... sigma(m^(gcd(i,n)) ...

  8. poj 1286 Necklace of Beads (polya(旋转+翻转)+模板)

      Description Beads of red, blue or green colors are connected together into a circular necklace of ...

  9. POJ 2409 Let it Bead (Polya定理)

    题意 用k种颜色对n个珠子构成的环上色,旋转翻转后相同的只算一种,求不等价的着色方案数. 思路 Polya定理 X是对象集合{1, 2, --, n}, 设G是X上的置换群,用M种颜色染N种对象,则不 ...

随机推荐

  1. 使用GDAL实现DEM的地貌晕渲图(一)

    目录 1. 原理 1) 点法向量 2) 日照方向 (1) 太阳高度角和太阳方位角 (2) 计算过程 3) 晕渲强度 2. 实现 3. 参考 @ 1. 原理 以前一直以为对DEM的渲染就是简单的根据DE ...

  2. Json串排序

    最近遇到个很烦人的问题.我现在做的业务有一部分是把之前app服务端的.net接口转译java接口.但是有些之前的接口,一个接口干上十几件事情,返回的json串长达五六几百行.着实看的就让人头大.但是如 ...

  3. 把 python 程序打包成 egg 或者 whl 安装包

    原文出处:http://www.worldhello.net/2010/12/08/2178.html 本文略有改动 1.1 安装setuptools 首先要安装setuptools工具.Debian ...

  4. @ImportResource导入的xml配置里的Bean能够使用@PropertySource导入的属性值吗?

    每篇一句 大师都是偏执的,偏执才能产生力量,妥协是没有力量的.你对全世界妥协了你就是空气.所以若没有偏见,哪来的大师呢 相关阅读 [小家Spring]详解PropertyPlaceholderConf ...

  5. Method has too many Body parameters openfeign

    feign 调用问题,最新版本的feign和旧版本的稍微有一些不一样,具体如下(eureka 作为服务发现与注册 ) 依赖: compile('io.github.openfeign:feign-ja ...

  6. 个人永久性免费-Excel催化剂功能第85波-灵活便捷的批量发送短信功能(使用腾讯云接口)

    微信时代的今天,短信一样不可缺席,大系统都有集成短信接口.若只是临时用一下,若能够直接在Excel上加工好内容就可以直接发送,这些假设在此篇批量群发短信功能中都为大家带来完美答案. 业务场景 不多说, ...

  7. SpringBoot2.0集成WebSocket,实现后台向前端推送信息

    感谢作者,支持原创: https://blog.csdn.net/moshowgame/article/details/80275084 什么是WebSocket? WebSocket协议是基于TCP ...

  8. C#2.0新增功能05 迭代器

    连载目录    [已更新最新开发文章,点击查看详细] 迭代器可用于逐步迭代集合,例如列表和数组. 迭代器方法或 get 访问器可对集合执行自定义迭代. 迭代器方法使用 yield return 语句返 ...

  9. 2017day2

    系统模块: # Author: sonny# -*- coding:utf-8 -*-import sys; #print(sys.path);print(sys.argv);print(sys.ar ...

  10. python正则表达式与re模块-02

    正则表达式 正则表达式与python的关系 # 正则表达式不是Python独有的,它是一门独立的技术,所有的编程语言都可以使用正则 # 但要在python中使用正则表达式,就必须依赖于python内置 ...