题目链接:http://www.spoj.com/problems/TRANSP2/

题意:

思路:不妨设a=1,b=2,

我们发现(001,010,100)组成一个置换,(011,110,101)组成一个置换。那么对于同一个置换中元素,设置换大小为x,则需要x-1次交换。因此,我们若找到循环节的个数K,那么答案即为2^(a+b)-K.

a+b个珠子的项链,每个珠子可以用两种颜色涂色,通过每次左移a个珠子得到的相同的视为相同。求不同项链的个数。问题就转化成这个。设g=Gcd(a,a+b),则置换群个数为G=(a+b)/g。其实可以看做有G个珠子,每个珠子可以用2^g种颜色涂色。答案为:

int a,b,Pow[N],phi[N];
int prime[1005],tag[1005],cnt; void init()
{
Pow[0]=1;
int i,j;
for(i=1;i<N;i++) Pow[i]=Pow[i-1]*2%mod; phi[1]=1;
for(i=2;i<N;i++) if(!phi[i]) for(j=i;j<N;j+=i)
{
if(!phi[j]) phi[j]=j;
phi[j]=phi[j]/i*(i-1);
} for(i=1;i<N;i++) phi[i]%=mod; for(i=2;i<=1000;i++) if(!tag[i])
{
prime[cnt++]=i;
for(j=i+i;j<=1000;j+=i) tag[j]=1;
}
} int Gcd(int x,int y)
{
if(y==0) return x;
return Gcd(y,x%y);
} i64 exGcd(int a,int b,i64 &x,i64 &y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
i64 temp=exGcd(b,a%b,x,y);
i64 t=x;
x=y;
y=t-a/b*y;
return temp;
} int p[105],q[105],num; void split(int n)
{
num=0;
int i;
for(i=0;i<cnt&&prime[i]*prime[i]<=n;i++) if(n%prime[i]==0)
{
p[num]=prime[i];
q[num]=0;
while(n%prime[i]==0)
{
q[num]++;
n/=prime[i];
}
num++;
}
if(n>1) p[num]=n,q[num++]=1;
} int ans,m,L; int calPow(int a,int b)
{
int ans=1;
while(b)
{
if(b&1) ans=(i64)ans*a%mod;
a=(i64)a*a%mod;
b>>=1;
}
return ans;
} void cal(int t)
{
int x=L/t;
ans+=(i64)calPow(m,t)*phi[x]%mod;
ans%=mod;
} void DFS(int dep,int t)
{
if(dep==num)
{
cal(t);
return;
}
int i;
for(i=0;i<=q[dep];i++)
{
DFS(dep+1,t);
t*=p[dep];
}
} int main()
{
init();
rush()
{
RD(a,b);
if(!a||!b)
{
puts("0");
continue;
}
b+=a;
int k=Gcd(a,b);
L=b/k;
split(L); ans=0; m=Pow[k];
DFS(0,1);
i64 x,y;
exGcd(L,mod,x,y);
x=(x%mod+mod)%mod;
ans=ans*x%mod;
ans=Pow[b]-ans;
ans=(ans%mod+mod)%mod;
PR(ans);
}
}

  

SPOJ 422 Transposing is Even More Fun(polay计数)的更多相关文章

  1. SPOJ 422 Transposing is Even More Fun ——Burnside引理

    这题目就比较有趣了. 大概题目中介绍了一下计算机的储存方法,给一个$2^a*2^b$的矩阵. 求转置.但是只能交换两个数,求所需要的步数. 首先可以把变化前后的位置写出来,构成了许多的循环.左转将狼踩 ...

  2. 解题:SPOJ 422 Transposing is Even More Fun

    题面 这种换来换去的东西很容易想到置换群那一套,然后题目甚至还暗示了二进制=.= 直接换的话显然是$2^{a+b}$次,但是一个循环节里可以少换一次,然后问题就变成了数循环节 在一个循环节里的位置有什 ...

  3. Burnside引理和polay计数学习小记

    在组合数学中有这样一类问题,比如用红蓝两种颜色对2*2的格子染色,旋转后相同的算作一种.有多少种不同的染色方案?我们列举出,那么一共有16种.但是我们发现,3,4,5,6是同一种,7,8,9,10是用 ...

  4. 【SPOJ】Transposing is even more fun!

    题意: 给出a.b 表示按先行后列的方式储存矩阵 现在要将其转置 可以交换两个点的位置 求最小操作次数 题解: 储存可以将其视为拉成一条链 设a=5.b=2 则在链上坐标用2^***(a,b)表示为( ...

  5. POJ 2409 Let it Bead(polay计数)

    题目链接:http://poj.org/problem?id=2409 题意:给出一个长度为m的项链,每个珠子可以用n种颜色涂色.翻转和旋转后相同的算作一种.有多少种不同的项链? 思路: (1) 对于 ...

  6. HDU 4633 Who's Aunt Zhang(polay计数)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4633 题意:有下面一个魔方.有K种颜色.可以为顶点.边.面(每个面有9个小面)染色.两种染色算作一种当 ...

  7. SPOJ.104.Highways([模板]Matrix Tree定理 生成树计数)

    题目链接 \(Description\) 一个国家有1~n座城市,其中一些城市之间可以修建高速公路(无自环和重边). 求有多少种方案,选择修建一些高速公路,组成一个交通网络,使得任意两座城市之间恰好只 ...

  8. Burnside引理和polay计数 poj2409 Let it Bead

    题目描述 "Let it Bead" company is located upstairs at 700 Cannery Row in Monterey, CA. As you ...

  9. polay计数原理

    公式: Burnside引理: 1/|G|*(C(π1)+C(π2)+C(π3)+.....+C(πn)): C(π):指不同置换下的等价类数.例如π=(123)(3)(45)(6)(7),X={1, ...

随机推荐

  1. 【BZOJ】【1221】【HNOI2001】软件开发

    网络流/费用流 说是这题跟餐巾计划一模一样……但我没做过啊……so sad 二分图建模是很好想的,但是要控制流量跟用了的毛巾一样多……oh my god 事实上对于每一天我们无论如何都是要消耗n[i] ...

  2. noi2006day2_最大获利 网络流

    这道题是上一题的数据加强版,dinic表示毫无压力: #include<iostream> #include<cstdio> #include<cstring> # ...

  3. extjs4与ckeditor、ckfinder整合

    <script type="text/javascript"src="<?php echo Yii::app()->request->baseUr ...

  4. JAVA敏捷开发环境搭建(转载)

    前面介绍了创业型软件公司的工作模式,这里详细介绍下如何实施,第一步是先要搭建环境,有了环境才能开展工作. 整个软件项目分为四个环境 开发本地环境.开发环境.测试环境.IDC环境.和传统C++开发不一样 ...

  5. AngularJs学习笔记--Forms

    原版地址:http://code.angularjs.org/1.0.2/docs/guide/forms 控件(input.select.textarea)是用户输入数据的一种方式.Form(表单) ...

  6. 《JavaScript DOM编程艺术》

    第2章JS语法关联数组在为新元素给出下标时,不必局限于整数数字.数组下标可以是字符串逻辑与&&只有两个操作数都是true时结果才为true逻辑或||只有两个操作数都是false时结果才 ...

  7. CSS3:线上编辑工具及实用资料整理

    an I Use 个人最常用的,资料比较全,桌面和移动浏览器支持HTML5,CSS3,SVG和兼容性表. 官网地址:http://caniuse.com/ CSS3 Click Chart CSS3 ...

  8. 远程数据源Combobox

    Ext.define('bookInfo', {          extend: 'Ext.data.Model',//新类继承自model          fields: [{ name: 'b ...

  9. (9)nehe教程3--添加颜色

    添加颜色: 作为第二课的扩展,我将叫你如何使用颜色.你将理解两种着色模式,在左图中,三角形用的是光滑着色,四边形用的是平面着色. 上一课中我教给您三角形和四边形的绘制方法.这一课我将教您给三角形和四边 ...

  10. github研究

    一个程序猿一定会用git,但是我还没怎么用过,平时真是懒啊,学习之!...