HDU 5651 xiaoxin juju needs help 逆元

Posted Ritchie丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 5651 xiaoxin juju needs help 逆元相关的知识,希望对你有一定的参考价值。

  1. 给你n个字母,求可以组成的回文串的个数  
  2. 1.n为奇数,有一个字母的个数为奇数  
  3. 2.n为偶数,字母个数全为偶数  
  4.   
  5. 然后将字母的个数num[i]/2,得出在对称轴左边的个项字母的个数  
  6. 假设左边有len个字母,如果每个字母都不同则有len!中可能  
  7. 然后除去所有重复的可能num[i]!即可  
  8. 因为除法取模 (len!/num[i]!)%mod  
  9. a^(p-1) = 1(mod p)p为素数    于是 a*a^(p-2) = 1(mod p)所以a^(p-2)替代1/a.  
  10. 所以上面的公式  ->  len!*(num[i]!)^(p-2)%mod  
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<cstdlib>
    #define mod 1000000007
    using namespace std;
    typedef long long LL;
    int C[550][550];
    int main()
    {
        memset(C,0,sizeof(C));
        for(int i=0;i<=505;i++)
        {
            C[i][1]=i;
            C[i][0]=1;
        }
        for(int i=2;i<=500;i++)
        for(int j=2;j<=i;j++)
        {
            C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;
        }
        //freopen("in.txt","r",stdin);
        int t;
        scanf("%d",&t);
        while(t--)
        {
            LL ans=1;
            int i,len,cnt=0;
            char s[1050];
            scanf("%s",s);
            len=strlen(s);
            int a[400],b[400],j=0;
            memset(a,0,sizeof(a));
            for(i=0;i<len;i++)
            {
                a[s[i]]++;
            }
            for(i=a;i<=z;i++)
            {
                if(a[i])
                {
                    b[j++]=a[i]/2;
                }
                if(a[i]%2!=0)
                cnt++;//奇数个字符的个数
            }
            if(cnt>1)
            {
                printf("0\n");
                continue;
            }
            int h=len/2;
            for(i=0;i<j;i++)
            {
                ans=(ans*C[h][b[i]])%mod;
                h-=b[i];
            }
            printf("%I64d\n",ans);
        }
        return 0;
    }

     

以上是关于HDU 5651 xiaoxin juju needs help 逆元的主要内容,如果未能解决你的问题,请参考以下文章

HDU 5651 xiaoxin juju needs help 逆元

hdu5651 xiaoxin juju needs help (多重集的全排列+逆元)

HDU 5651 xiaoxin juju needs help(BestCoder Round #77 (div.1)1001)

HDU 5651 逆元

HDU 5651

HDU 5654 xiaoxin and his watermelon candy 离线树状数组