POJ 1286 Necklace of Beads (Polya定理)
来源:互联网 发布:部落冲突数据大全2016 编辑:程序博客网 时间:2024/06/05 09:41
题目链接:
POJ 1286
题意:就是求这样的三种颜色的组合有多少种?旋转和对称的重复的不算。
题解:Polya定理题。主要考虑旋转和对称的情况。
旋转:
当
0格:(1)(2)(3)(4)可以互相转化
1格:(1,2,3,4)可以互相转化
2格:(1,3)(2,4)可以互相转化
3格:(1,2,3,4)可以互相转化
所以,
旋转:顺时针旋转i 格的置换中,循环的个数为gcd(i,n) ,每个循环的长度为n/gcd(i,n)
同理,当
对称:
当
其中2条,(1,2)(3,4)可以互相转化
另外2条,(1)(3)(2,4)可以互相转化
当
每一条,(1)(2,5)(3,4)
以此类推。
最终
所以就可以写代码了。
代码:
//#include <bits/stdc++.h>#include <iostream>#include <cstdio>#include <algorithm>using namespace std;typedef long long ll;ll q_pow(ll a,ll b){ ll ans =1; while(b) { if(b&1){ ans=(ans*a); } b>>=1; a=a*a; } return ans;}ll n;ll gcd(ll a,ll b){ return b==0?a:gcd(b,a%b);}int main(){ while(~scanf("%lld",&n)) { if(n==-1)break; if(n==0){ puts("0");continue; } ll ans = 0; if(n&1) { ans += q_pow(3,n/2+1)*n; } else { ans +=q_pow(3,n/2+1)*(n/2) + q_pow(3,n/2)*(n/2); } for(int i=1;i<=n;i++) { ans +=q_pow(3,gcd(i,n)); } cout<<ans/(2*n)<<endl; } return 0;}
阅读全文
1 0
- POJ--1286[Necklace of Beads] Polya定理
- POJ 1286 Necklace of Beads Polya定理
- poj 1286 Necklace of Beads(Polya定理)
- POJ 题目1286 Necklace of Beads(Polya定理)
- poj Necklace of Beads 1286 (polya定理)置换群
- 【POJ 1286】Necklace of Beads(polya定理)
- poj 1286 Necklace of Beads(polya 定理)
- 【POJ 1286】Necklace of Beads(Polya 定理)
- POJ 1286 Necklace of Beads (Polya定理)
- POJ 1286 Necklace of Beads(polya)
- POJ 1286 Necklace of Beads (Polya)
- POJ 1286 Necklace of Beads(polya计数、burnside定理)
- poj1286 Necklace of Beads(polya定理)
- Polya 定理 (附POJ 1286 Necklace of Beads 解题报告)
- POJ 1286-Necklace of Beads(Polya定理-旋转+翻转 串项链)
- poj 1286 Necklace of Beads -----polya计数
- poj 1286 Necklace of Beads (polya)
- poj 1286 Necklace of Beads polya计数
- VMware虚拟机安装centOS
- nginx与php-fpm 504 Gateway Time-out 排查与解决案例
- 如何不利用一个额外的变量来达到交换两个变量值的目的-------位上的异或运算
- ^M导致的编译出错
- HDU 4507 吉哥系列故事――恨7不成妻(求所有满足数的平方和)
- POJ 1286 Necklace of Beads (Polya定理)
- POJ3616Milking Time(DP)
- Hadoop on YARN参数配置讲解
- word3013,批量修改mathtype中的字体样式
- html你可能还不知道的一些知识点
- 最简单自定义dialog去除dialog黑边方法
- C++关键字
- Spring 设计模式之策略模式应用
- C++指针初步介绍