设为首页 加入收藏

TOP

[codevs 2926] 黑白瓷砖(2002年安徽省队选拔赛)
2015-07-20 17:19:19 来源: 作者: 【 】 浏览:5
Tags:codevs 2926 黑白 瓷砖 2002年 安徽省 选拔赛

?


题解:

Polya定理的应用。
由于第一次做polya定理的题,故要写的详细些。
首先可以从题目中读到三个置换以及一个不动置换:

顺时针旋转120度。 顺时针旋转240度。 左右翻转180度。 旋转0度。(不动置换)

开始我本以为这样就算完成任务,就拿polya定理演算了一遍,结果发现n=2,n=3都不对。后来才明白现在的置换群中不满足封闭性。比如先顺时针旋转再左右翻转后的图形就不包含在内。所以还要增加两个斜向的翻转。

现在可以统计每个置换中循环的个数了:

旋转操作,可以画图数学归纳一下,每个循环中都有3个元素,(因为120度是360度的三分之一),那么一共就有((点数+2)/ 3)个循环。设为x。 翻转操作,经归纳,中轴线上有(n+1)/ 2 个点,每个点单独构成一个循环,其余两两配对,所以这些单点少算了一次,总循环数即 (总点数+中轴线上的点数)/ 2。设为y。 不动置换,即总点数。设为z。

接下来根据polya定理求最终结果。因为旋转有两个置换,翻转有三个(左右、斜向两个),还有一个不动置换,所以最后结果是
ans=2?2x+3?2y+2z6


代码:

其实需要高精,但我没打。

#include
   
     using namespace std; int main() { int n; scanf(%d, &n); //底层点数 int s = n * (n + 1) / 2; //总点数 int m = (s + (n + 1) / 2) / 2; //一个翻转置换的循环数 printf(%d , (2*(1<<((s+2)/3)) + 3*(1<
    
   
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 1535 && POJ 1511 In.. 下一篇HDU 1159 Common Subsequence 最..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·有没有哪些高效的c++ (2025-12-27 08:20:57)
·Socket 编程时 Accep (2025-12-27 08:20:54)
·计算机网络知识点总 (2025-12-27 08:20:52)
·一篇说人话的文章, (2025-12-27 07:50:09)
·Python Web框架哪家 (2025-12-27 07:50:06)