zoukankan      html  css  js  c++  java
  • poj 2409 Let it Bead (组合数学 polya计数法)

    大致题意:给你c种颜色的珠子,和一个长度为s(c,s<32)的项链,用这c种珠子串成这个项链,项链可以旋转和翻转,经过旋转和翻转所得的项链视为同一种项链,现在告诉你颜色总数c和项链的长度s,求共能组成几条不同的项链。

    Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 20000/10000K (Java/Other)

                          

    样例:

    Sample Input

    1 1
    2 1
    2 2
    5 1
    2 5
    2 6
    6 2
    0 0
    

    Sample Output

    1
    2
    3
    5
    8
    13
    21

    一看也是一个polya计数法的题,跟Problem 1286 Necklace of Beads基本是一个题,详细解释写在那个题了,用最简单的方法就能过,这里不再赘述了。


     1 #include<cstdio>
     2 #include<cmath>
     3 using namespace std;
     4 typedef __int64 ll;
     5 int gcd(int a,int b){
     6     if(b==0){
     7         return a;
     8     }
     9     return gcd(b,a%b);
    10 }
    11 int c,s;
    12 ll polya(){
    13     int i,j;
    14     ll ans=0;
    15     for(i=0;i<s;i++){
    16         ans+=(ll)pow(1.0*c,gcd(s,i));
    17     }
    18     if(s%2){
    19         ans+=s*(ll)pow(1.0*c,s/2+1);
    20     }
    21     else{
    22         ans+=s/2*(ll)pow(1.0*c,s/2);
    23         ans+=s/2*(ll)pow(1.0*c,s/2+1);
    24     }
    25     return ans/2/s;
    26 }
    27 int main(){
    28     while(scanf("%d%d",&c,&s)&&(c||s)){
    29         ll ans=polya();
    30         printf("%I64d\n",ans);
    31     }
    32     return 0;
    33 }
  • 相关阅读:
    sql执行顺序图
    solor5.4学习笔记
    linux 安装
    falsh,.swf文件修改z-index
    mysql 分区
    再次构架心得
    服务器,数据库连接注意mysql的user表
    数据库操作
    一知半见的load与get
    处理中文空格.replace((char)12288,' ')
  • 原文地址:https://www.cnblogs.com/mcflurry/p/2556899.html
Copyright © 2011-2022 走看看