• poj 1286 Necklace of Beads poj 2409 Let it Bead HDU 3923 Invoker <组合数学>


    链接:http://poj.org/problem?id=1286

    http://poj.org/problem?id=2409

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <algorithm>
     6 using namespace std;
     7 typedef long long LL;
     8 LL P_M( LL a, LL b )
     9 {
    10     LL res=1, t=a;
    11     while (b){
    12         if(b&1)res*=t;
    13         t*=t;
    14         b>>=1;
    15     }
    16     return res;
    17 }
    18 int a[30], vi[30];
    19 void dfs( int i )
    20 {
    21     if( !vi[i] ){
    22         vi[i]=1;
    23         dfs(a[i]);
    24     }
    25 }
    26 
    27 int find(int t, int n ) // 求循环节 s == gcd( n, t ) ;
    28 {
    29     memset(vi, 0, sizeof vi);
    30     memset(a, 0, sizeof a);
    31     for( int i=1; i<=n; ++ i ){
    32         int e=(i+t-1)%n;
    33         if( e==0 )e=n;
    34         a[i]=e;
    35     }
    36     int s=0;
    37    for( int i=1; i<=n; ++ i ){
    38         if(!vi[i]){
    39             dfs(i);
    40             s++;
    41         }
    42     }
    43     return s;
    44 }
    45 int gcd( int x, int y )
    46 {
    47     return y==0?x:gcd( y, x%y );
    48 }
    49 int main( )
    50 {
    51     int N;
    52     while( scanf("%d", &N)!= EOF){
    53         if( N==-1 )break;
    54         if( N==0 ){puts("0"); continue;}
    55         LL ans=0;
    56         if( !(N&1) ){
    57             ans=P_M(3LL, N);
    58             for( int i=2; i<=N; ++i ){
    59                 int t=find(i, N);
    60                 ans+=P_M( 3LL,t );
    61             }
    62             ans+=(LL)(N/2)*(P_M(3LL,(N+2)/2));
    63             ans+=(LL)(N/2)*P_M(3LL,N/2);
    64         }
    65         else{
    66             for( int i=0; i<N; ++i ){
    67                ans+=P_M(3LL, gcd(i, N));
    68             }
    69             ans+=(LL)(N)*(P_M(3LL,N/2+1));
    70 
    71         }
    72         printf( "%d
    ", ans/(2*N) );
    73     }
    74     return 0;
    75 }
    poj 1286
     1 #include <cstdio>
     2 #include <iostream>
     3 using namespace std;
     4 int N, M;
     5 typedef long long LL;
     6 LL P_M(int a, int b )
     7 {
     8     LL res=1,t=a;
     9     while(b){
    10         if(b&1)res*=t;
    11         t*=t;
    12         b>>=1;
    13     }
    14     return res;
    15 }
    16 int gcd( int x, int y )
    17 {
    18     return y==0?x:gcd( y, x%y );
    19 }
    20 LL polya( int k, int m )
    21 {
    22     LL ans=0;
    23     for( int i=0; i<m; ++ i ){
    24         ans+=P_M(k, gcd( i, m ));
    25     }
    26     if( m&1 ){
    27         ans+=(LL)(m*P_M( k, m/2+1 ) );
    28     }
    29     else {
    30         ans+=(LL)m/2*P_M(k, m/2);
    31         ans+=(LL)m/2*P_M(k, m/2+1);
    32     }
    33     if(m)ans/=2,ans/=m;
    34     return ans;
    35 }
    36 int main( )
    37 {
    38     while(scanf("%d%d", &N,&M)!=EOF, N+M ){
    39         printf("%lld
    ", polya(N, M));
    40     }
    41     return 0;
    42 }
    poj 2409
     1 #include <cstdio>
     2 #include <iostream>
     3 using namespace std;
     4 typedef long long LL;
     5 const LL M=1e9+7;
     6 LL P_M(int a, int b )
     7 {
     8     LL res=1,t=a;
     9     while(b){
    10         if(b&1)res*=t, res%=M;
    11         t*=t, t%=M;
    12         b>>=1;
    13     }
    14     return res;
    15 }
    16 int gcd( int x, int y )
    17 {
    18     return y==0?x:gcd( y, x%y );
    19 }
    20 LL polya( int k, int m )
    21 {
    22     LL ans=0;
    23     for( int i=0; i<m; ++ i ){
    24         ans+=P_M(k, gcd( i, m ));
    25         ans%=M;
    26     }
    27     if( m&1 ){
    28         ans+=(LL)(m*P_M( k, m/2+1 ) );
    29     }
    30     else {
    31         ans+=(LL)m/2*P_M(k, m/2);
    32         ans+=(LL)m/2*P_M(k, m/2+1);
    33     }
    34     ans%=M;
    35     return   (ans*P_M(2*m,M-2))%M;// 求逆元
    36 }
    37 int main( )
    38 {
    39     int T, N, K, t=1;
    40     scanf("%d", &T);
    41     while(T--){
    42         scanf("%d%d", &N,&K);
    43         printf("Case #%d: %I64d
    ", t++, polya(N, K));
    44     }
    45     return 0;
    46 }
    hdu 3923
  • 相关阅读:
    推荐系统中的特征处理
    推荐系统之协同过滤
    python 对字典排序
    推荐系统资料汇总
    python print和strip
    python ConfigParse模块(转)
    01_HBase概述
    04_Storm编程上手_WordCount集群模式运行
    03_Storm编程上手-wordcount
    02_Storm集群部署
  • 原文地址:https://www.cnblogs.com/jian1573/p/3233414.html
Copyright © 2020-2023  润新知