poj-1286&&2409-polya定理

2014-11-24 07:27:18 · 作者: · 浏览: 0

对于统计有多少个不同的解决方案的问题的求法:
对于每一种转变,有多少种不同的解决方案,这些解决方案的平均值即为最终答案。

比如说从3种珠子里选5颗制作手链,求有多少种不同的手链。

对于手链来说,旋转和翻转而成的手链是相同的。

旋转:

5颗珠子一共有5种旋转方式,分别是旋转i颗(0<=i<5)。

对于每种旋转,共有3^(gcd(i,5))种解决方案。

a=sum(3^(gcd(i,5)))(0<=i<5)

翻转:
奇数个珠子共有5个翻转方式。

对于每种翻转,共有3^((5+1)/2)种解决方案。

b=n*3^((5+1)/2)

所以最终的答案为(a+b)/n

2409的代码:

#include 
  
   
#include
   
     #include
    
      #include
     
       #include
      
        #include
       
         #define LL long long using namespace std; LL pows[101]; int t; int gcd(int n,int m) { if(n