1. 程式人生 > >群論及Polya計數定理題目入門

群論及Polya計數定理題目入門

本文以一些簡單的題目為例,來研究一下群論及Polya計數在OI中的應用
注:本文無程式碼,僅介紹題目的思路和技巧,且難度較低,因為這些題目並不難寫,在知道思路以後相信大家都能寫出來,其實是因為我的程式碼寫的太醜了,之後還會給一些有難度的題目另開博文

codevs 2845 傳送門

置換群相關題目
劉汝佳的黑書上講得十分詳細,我這裡再簡單提一下
整個數列可以劃分為若干個互不相交的迴圈,每個大小為sizi的迴圈i都要進行sizi1次交換,而且容易發現每個數都要至少被交換一次,所以從貪心的思路出發讓該迴圈中最小的數mini參與這sizi1次交換,所以把所有的迴圈貢獻累加,答案就是

sumi+mini×(sizi2)
sumi表示迴圈i中所有數的總和
不過這不一定是最優解,因為還有可能是讓全域性最小值Min來參與交換,那樣的話要先把Min加入迴圈,都交換完了以後再讓Min回到原來的迴圈中
所以最終答案是
sumi+min(mini×(sizi2),mini+Min×(sizi+1))

BZOJ 1025 傳送門

置換群相關題目
其實和置換關係不是特別大……
每種對應關係會讓排列形成若干個互不相交的迴圈,排數就是這些迴圈大小的最小公倍數
這樣問題就變成了“給定若干個正整數,它們的和為n,求它們可能的最小公倍數的種類數”
這問題糾結了我一會兒……後來猛然發現是個zz問題……
我們知道最小公倍數的質因子指數實際上是所有數中質因子指數的最大值,那麼對於有“相同的最小公倍數”的集合來說,數數之間兩兩互質的集合的總和更小,換句話來說,令集合中每個數都是互不相同的質數的若干次方,那麼這個集合的總和最小
然後就可以dp了,f

[i][j]表示dp到第i個質數,當前總和為j的方案數,然後暴力列舉指數就可以了
推薦記憶化搜尋

POJ2409 傳送門

Polya相關題目
裸題
不過我這裡還是詳細講一下好了
我們先看旋轉操作
在旋轉i格的情況下,會有gcd(i,n)個迴圈,迴圈長度為ngcd(i,n)
我有一個證明
考慮從一個點出發開始旋轉,至少要轉x次才能回到原點,那麼就是
xi=0(modn)
由於x要求最小,又因為i|xi,n|xi,那麼xi=lcm(i,n)=nigcd(i,n)
所以x=ngcd(i,n)
迴圈長度就是ngcd(i,n)了,迴圈個數也就顯而易見了
所以旋轉的不動點數就是

ni=1cgcd(i,n)
這裡範圍比較小,直接做就可以了
翻折的話分開討論下
如果n為奇數,那麼每條對稱軸的翻折就都是有(n1)/2+1個迴圈,1個長度為1和(n-1)/2個長度為2的
如果n為偶數,那麼點點對稱軸有(n2)/2+2個迴圈,2個長度為1和(n-2)/2個長度為2的;邊邊對稱軸有n/2個迴圈,n/2個長度為2的。
POJ1286更為簡單,顏色數是給出的

codevs2926 傳送門

Polya相關題目
也是裸題
不過這好像是我寫的第一道Polya,所以是暴力亂搞的……
一共6種置換方式,旋轉0°,120°,240°和翻折後旋轉
要寫高精加,高精乘單精和高精除單精
感覺爽翻了……

BZOJ1004 傳送門

Polya相關題目
其實是DP……
考慮用dp來統計不動點數量,這就要求在某一置換下同一迴圈內的元素必須染色相同,然後DP搞就可以了,狀態我就不說了,肯定都會……

TJU2795 傳送門

Polya相關題目
也是考慮同一迴圈內元素顏色相同
其實也是裸題……
注意一下就是統計答案時實際上是若干個元素(迴圈)排列,還要除去顏色相同的迴圈的排列(算一下階乘就好了……)
其實是多重集排列
求解過程記錄質因子及次數,然後乘起來加到答案裡就好
把codevs2926的高精板子搬過來正好用上

UVA10601 傳送門(我在vjudge上交的)

Polya相關題目
有24種置換方式
對稜中點為對稱軸旋轉180°,對面中點為對稱軸旋轉90°、180°、270°,體對角線為對稱軸旋轉120°,240°。
前兩種很好想,但我糾結了半天體對角線旋轉多少度會與本身重合,因為身邊沒有魔方,拿著具體數學擺弄了好久
其實看成正三稜錐就很容易了,因為它的底面是正三角形
剩下的就是隨便做了

POJ 2154 傳送門

Polya相關題目
做完上面的題,一眼就看出來答案是什麼了
數論優化求解

i=1nngcd(i,n)
let gcd(i,n)=d
=d=1ni=1n[d=gcd(i,n)]nd
let i=di
=d=1n[d|n]ndi=1nd[gcd(nd,i)=1]
=d=1n[d|n]ndφ(nd)
然後

相關推薦

論及Polya計數定理題目入門

本文以一些簡單的題目為例,來研究一下群論及Polya計數在OI中的應用 注:本文無程式碼,僅介紹題目的思路和技巧,且難度較低,因為這些題目並不難寫,在知道思路以後相信大家都能寫出來,其實是因為我的程式碼寫的太醜了,之後還會給一些有難度的題目另開博文 co

置換&Polya計數簡易版學習筆記

置換群&Polya計數簡易版學習筆記 前言 這個定理其實我學了蠻久的,就是一直一直沒有掌握,原因是太抽象,而且證明也沒怎麼理解,今天看了Candy?大佬的部落格,結合自己少得可憐的抽象代數知識,總算是搞懂了一點點,趕緊來發一波blog 問題引入 抽象的東西自然要把

UVA10294 Arif in Dhaka (論,Polya定理)

gpo 之前 pan 循環節 href 等價 polya定理 定義 limit UVA10294 Arif in Dhaka (群論,Polya定理) 題意 : 給你一個長為\(n\)的項鏈和手鐲,每個珠子有\(m\)種顏色. 兩個手鐲定義為相同,即它們通過翻轉和旋轉得

polya/burnside定理入門

burnside和polya都是解決非等價染色方案的計數工具,最近剛剛學習,做了幾道入門題,今天整理一下。 首先將旋轉、翻轉之類的變換都轉變為一個置換,構成一個置換群G。 簡單來說,burnside定理就是 非等價染色數 = 在G中單個置換下保持不變的染色數

POJ 2409-Let it Bead(Polya計數)

algorithm target lib tails link mod art typedef data- 題目地址:POJ 2409 題意:給一個包括s個珠子的項鏈,用c種顏色對其染色,問存在多少個不同的項鏈。 思路:和上一篇POJ 1286幾乎相同。 #i

組合數學及其應用——polya計數

固定 更多 符號 .com 過程 嘗試 容易 高中 立方體 在處理類似下面的問題中,一般的計數方法會出現問題:假如你要用紅、藍兩種顏色給一個正四面體的四個頂點著色,試問存在多少種不同的著色方案? 在高中我們常用的方法是模擬塗色過程,分情況討論,然後基於分步乘法原理

2017 ACM區域賽現場賽 青島站 E (polya計數

amp mod 循環 等價 img cout es2017 範圍 知乎 題目鏈接(暫無) 吐槽:這場比賽感覺對我感覺還算友好,雖然Q群知乎上命題方已經被噴死了,C語言上機題還有字符串題有大腿隊友輕松搞定,網絡流恰是我能想出來的,E本來也應該是在能力範圍內,不過因為之前沒寫過

組合數學之Polya計數

rmi IT clu over any color div 題目 ive 1116: Let it Bead Time Limit(Common/Java):1000MS/10000MS Memory Limit:65536KByteTotal Submit: 7

[ACM] POJ 2409 Let it Bead (Polya計數

圖片 std stream class blank https ima tails ace 參考:https://blog.csdn.net/sr_19930829/article/details/38108871 1 #include <iostream>

BZOJ1119:置換的輪換計數

要求 ons con 題目 const algo inf long namespace 題目要求的同上一題,只不過這裏給定了原始的序列,結束的序列的每一個元素的下標,更加一般 1 #include<cstdio> 2 #include<algorit

【poj 1286 Necklace of Beads】【具有對稱性的計數】【polya計數】【項鍊染色方案數】

【連結】 http://poj.org/problem?id=1286 【題意】 n個珠子串成一個圓,用三種顏色去塗色。問一共有多少種不同的塗色方法(翻轉,旋轉相同) 翻轉:如果n是奇數,則存在n中置換,每種置換包含n/2+1種迴圈(即輪換)。     &nb

gym-101873B Buildings(polya計數

Sample Input 1 Sample Output 1 1 3 1 1 Sample Input 2 Sample Output 2 2 5 2 209728 題意:一個房子,正m

Problem B—— Buildings(Polya計數裸題)

題意: 簡化後為:正m面形,每面塗色,c種顏色,置換為旋轉,求方案數 解析: 所有置換分別為:靜置,轉1個360/m,……轉m-1個360/m 也就是轉0個面,1個面,……轉m-1個面 很容易得到,旋轉i個面時,置換群的迴圈節個數為gcd(i,m) 那麼按照公

【poj 1286 Necklace of Beads】【具有對稱性的計數】【polya計數】【項鍊染色方案數】

【連結】 【題意】 n個珠子串成一個圓,用三種顏色去塗色。問一共有多少種不同的塗色方法(翻轉,旋轉相同) 翻轉:如果n是奇數,則存在n中置換,每種置換包含n/2+1種迴圈(即輪換)。             如果n是偶數,如果對稱軸過頂點,則存在n/2種置換,每種

hiho一下第234周《矩形計數題目與解答

一、題目 題目1 : 矩形計數 時間限制: 10000ms 單點時限: 1000ms 記憶體限制: 256MB

微信分享:Python協程入門

Python語言是由Guido van Rossum大牛在1989年發明,它是當今世界最受歡迎的計算機程式語言之一,也是一門“學了有用、學了能用、學會能久用”的計算生態語言。為此,CSDN作為國內最大的IT中文社群,特向廣大Python愛好者開設了Python學

polya計數學習小結

最近半個月以來一直在看《組合數學》,馬馬虎虎也算翻完了,理解的也很淺,接下來的一個月中,我將把主要精力放在做數學題上同時鞏固總結這一 個月以來所學的數論組合數學知識。那就先從Polya計數法開始吧。 Burnside定理:首先介紹一下有關置換群的一些知識。 置換:設X是一個

polya|burnside定理的一些總結

基於正方形的置換:(hdu 1812) 旋轉只有 0,90,180,270度三種旋法。 旋0度,則置換的輪換數為n*n 旋90度,n為偶數時,則置換的輪換數為n*n/4,n為奇數,則置換的輪換數為(n*n-1)/4+1 旋180度,n為偶數時,則置換的輪換數為n*n/2,n

Polya計數 學習筆記

置換 基本概念 置換是相對與群(當然我們討論的是有限群= =)而言的一種操作。 通常我們這樣來表示 (1a12a23a3⋯⋯nan)(123⋯na1a2a3⋯an) 它的意義是對於新的排列,編號為aiai的元素將被編號為ii的元素所取代(不是位置)

burnside引理+polya計數法小結

WC上wwwwodddd講的整數和多項式相關裡面最後又burnside引理的一部分 被生成函式調戲瘋了的我突然斷線重連 坐在禮堂最後一排的沙發位上和老黃人瘋狂口糊 不過聽課的時候想的不是很細,重新整理了一發 大概就是 本質不同的方案數=1置換個