随笔分类 -  群论

摘要:一道很不错的题目,这里加入连接限制同时还考察优化,优化方法同上。连接限制如何处理?注意到项链个数很少,因此可以建图,然后分别求出每种颜色连接n个珠子后回到自身的方案数,累加即可,这里可以用矩阵快速幂求解。View Code #include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<queue> #include<set> #include<map> #inclu 阅读全文
posted @ 2012-09-19 20:04 wutaoKeen 阅读(192) 评论(0) 推荐(0)
摘要:这是一道简单的置换群的问题;View Code #include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<queue> #include<set> #include<map> #include<cstring> #include<vector> #include<string> #define LL long long usi 阅读全文
posted @ 2012-09-15 20:55 wutaoKeen 阅读(108) 评论(0) 推荐(0)
摘要:这是一道置换+DP的的题目;题意是要你把每一个置换都可以分解成若干个轮换,那么这些轮换的阶的最小公倍数就是该置换的阶。这里要我们求怎样分解使最小公倍数最大,并且使置换排序最小;怎样求最大的最小的公倍数,这里我们用DP的方法可以容易求出;dp[i][j]表示i分解成j个数;排序就只要对因子进行排序就可以了(自己写一下就知道了)在进行输出;View Code #include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> # 阅读全文
posted @ 2012-09-15 19:06 wutaoKeen 阅读(294) 评论(0) 推荐(0)
摘要:这是一道置换题目,我们只要找出每个置换循环的循环节就可以了,对K进行取模,在进行模拟就OK了;代码1:View Code #include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<queue> #include<set> #include<map> #include<cstring> #include<vector> #include&l 阅读全文
posted @ 2012-09-12 21:09 wutaoKeen 阅读(172) 评论(0) 推荐(0)
摘要:这是一个比较赤裸的群论题目,只是对他进行分步计算就可以了:首先是旋转计算;在进行对称计算,这时候我们要对它进行奇偶讨论,当为奇数是我们就以每个顶点与它的对边中点连线为对称轴,那么循环节为(n+1)/2;当为偶数时:有两个种对称轴,一是以顶点连线,二是以边的中点连线,前者循环节为n/2,后者为n/2+1;View Code #include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<queue& 阅读全文
posted @ 2012-09-10 20:22 wutaoKeen 阅读(215) 评论(0) 推荐(0)
摘要:这个题是一道置换问题的题,是黑书上面的无聊的排序问题;根据群论知识我们可以分解为S个不想交的循环的乘积。例如:8 4 5 3 2 7,目标状态为2 3 4 5 7 8,我们可以分解为两个循环的乘积,(8 2 7 ), ( 4 3 5 )。我们知道对两个循环分别进行完成交换,就可以完成任务;对于任意一个循环i,设他的长度为ki,容易证明至少要循环ki - 1次,即每次让一个元素到达目标位置,而当第ki - 1元素到达目标以后显然第ki个也到达目标。我们知道每个循环至少要交换一次,要代价最小,因此我没每次拿最小的元素去交换,总的花费是sum(循环总值)+ ( cnt(循环个数) - 2 )*min 阅读全文
posted @ 2012-09-10 20:01 wutaoKeen 阅读(177) 评论(0) 推荐(0)