• HDU 5651 xiaoxin juju needs help 水题一发


    分析:求一下组合数

    首先,如果不止一个字符出现的次数为奇数,则结果为0。

    否则,我们把每个字符出现次数除2,也就是考虑一半的情况。

    那么结果就是这个可重复集合的排列数了。 fact(n)/fact(a_1)/fact(a_2)/..../fact(a_n)fact(n)/fact(a1​​)/fact(a2​​)/..../fact(an​​)

    #include<cstdio>
    #include<cstring>
    #include<queue>
    #include<cstdlib>
    #include<algorithm>
    #include<vector>
    #include<cmath>
    using namespace std;
    typedef long long LL;
    const int N=1e3+5;
    const int INF=0x3f3f3f3f;
    const LL mod=1e9+7;
    LL c[N>>1][N>>1];
    void init(){
      for(int i=0;i<=500;++i)c[i][0]=1;
      for(int i=1;i<=500;++i)
        for(int j=1;j<=500;++j)
          c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
    }
    char s[N];
    int a[26];
    int main(){
        init();
        int T;
        scanf("%d",&T);
        while(T--){
          scanf("%s",s+1);
          int l=strlen(s+1);
          for(int i=0;i<26;++i)a[i]=0;
          for(int i=1;i<=l;++i)
            a[s[i]-'a']++;
          int cnt=0,x;
          for(int i=0;i<26;++i)
          if(a[i]%2)++cnt,x=i;
          if(cnt){
            if(l%2){
               if(cnt>1){
                printf("0
    ");
                continue;
               }
               else --a[x];
            }
            else{
               printf("0
    ");
               continue;
            }
          }
          else{
            if(l%2){
               printf("0
    ");
               continue;
            }
          }
          LL ans=1;
          l>>=1;
          for(int i=0;i<26;++i){
             if(!a[i])continue;
             a[i]>>=1;
             ans=(ans*c[l][a[i]])%mod;
             l-=a[i];
          }   
          printf("%I64d
    ",ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    17.CSS 文本属性和字体属性
    15.CSS 浮动
    D. Same GCDs
    B. Infinite Prefixes
    D. 0-1 MST
    lambda表达式复习
    D. New Year and Conference
    C. New Year and Permutation
    D. Dr. Evil Underscores
    D. Minimax Problem
  • 原文地址:https://www.cnblogs.com/shuguangzw/p/5324221.html
Copyright © 2020-2023  润新知