多校第9場HDU3923Invoker(polya定理)

來源:互聯網
上載者:User

給n個顏色,m個點的環,求有多少種通過旋轉,翻轉變化後不同的染色方法

利用polya定理

用大數模數,一直WA,改成數組預先處理就AC了。。。

#include <cstdio>const long long mm=1000000007;int I=0;long long bigmod(long long  b,long long  p,long long  m){   long long k;   for(k=1,b=b%m; p ; p/=2,b=b*b%m)     if(p%2) k=k*b%m;     //printf("%lld\n", k%m);     return k%m;}long long  gcd (long long  a,long long  b){     return b?gcd(b,a%b):a;}int main (){    int cas;    scanf("%d",&cas);    while (cas--)    {          int  n,m;          long long  ans=0;          scanf("%d%d",&n,&m);          long long t=2*m*mm;//          long long pre[10020];          pre[0]=1;          for (int i=0 ; i<m ; ++i)           pre[i+1]=(pre[i]*n)%t;          for (int i=1 ; i<=m ; ++i )//旋轉           {              //ans=(ans+bigmod(n,gcd(i,m),t))%t;              ans=(ans+pre[gcd(i,m)])%t;          }          //翻轉 分奇偶           if(m&1)          {              //ans=(ans+bigmod(n,m/2+1,t)%t*m%t)%t;              ans=(ans+pre[m/2+1]*m)%t;          }          else           {               //ans=(ans+(bigmod(n,m/2,t)+bigmod(n,m/2+1,t))*(m/2))%t;               ans=(ans+(pre[m/2]+pre[m/2+1])*m/2)%t;          }          //printf("%lld  %lld\n",ans,t);          printf("Case #%d: %lld\n",++I,(ans/2/m)%mm);    }    return 0;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.