• [Codeforces]856C


    题目大意:给出n个数,问有多少种排列把数字接起来是11的倍数。(n<=2000)

    做法:一个数后面接一个数等同于乘上10的若干次幂然后加上这个数,10模11等于-1,所以10的若干次幂是-1或1,根据这个把长度奇和偶的分开考虑,他们最后对和的贡献都是可以确定的几段正几段负,f[i][j][k]表示前i个长度为奇/偶的数,j个贡献为负,对和的贡献为k的方案数,最后再排列组合比较容易可以算出答案,复杂度O(11*n^2)。

    代码:

    #include<cstdio>
    #include<cstring>
    inline int read()
    {
        int x;char c;
        while((c=getchar())<'0'||c>'9');
        for(x=c-'0';(c=getchar())>='0'&&c<='9';)x=x*10+c-'0';
        return x;
    }
    #define MN 2000
    #define MOD 998244353
    int a[MN+5],an,b[MN+5],bn,C[MN+5][MN+5],f1[MN+5][MN+5][11],f2[MN+5][MN+5][11],v[100],p[MN+5];
    inline int mod(int x){return x<MOD?x:x-MOD;}
    inline int f(int n,int m){return m?1LL*p[n]*C[n+m-1][m-1]%MOD:n?0:1;}
    int main()
    {
        int T,n,i,j,k,x,ans;
        for(p[0]=i=1;i<=MN;++i)p[i]=1LL*p[i-1]*i%MOD;
        for(i=0;i<=MN;++i)for(C[i][0]=j=1;j<=i;++j)C[i][j]=mod(C[i-1][j-1]+C[i-1][j]);
        for(i=0;i<100;++i)v[i]=i%11;
        for(T=read();T--;)
        {
            n=read();an=bn=0;
            for(;n--;(j&1?a[++an]:b[++bn])=x%11)for(k=x=read(),j=0;k;k/=10)++j;
            for(f1[0][0][0]=1,i=1;i<=an;++i)for(j=0;j<=an/2;++j)for(k=0;k<11;++k)
                f1[i][j][k]=mod((j?f1[i-1][j-1][v[k+a[i]]]:0)+f1[i-1][j][v[k+11-a[i]]]);
            for(f2[0][0][0]=1,i=1;i<=bn;++i)for(j=0;j<=bn;++j)for(k=0;k<11;++k)
                f2[i][j][k]=mod((j?f2[i-1][j-1][v[k+b[i]]]:0)+f2[i-1][j][v[k+11-b[i]]]);
            for(j=0;j<11;++j)f1[an][an/2][j]=1LL*f1[an][an/2][j]*p[an/2]%MOD*p[an-an/2]%MOD;
            for(ans=i=0;i<=bn;++i)for(j=0;j<11;++j)
                ans=(ans+1LL*f1[an][an/2][j]*f2[bn][i][v[11-j]]%MOD*f(i,(an+1)/2)%MOD*f(bn-i,an+1-(an+1)/2))%MOD;
            printf("%d
    ",ans);
        }
    }
  • 相关阅读:
    PHP5.5安装php-redis扩展
    表格行变换顺序功能(jquery)
    linux curl命令验证服务器断点续传支持
    Yii表单模型使用及以数组形式提交表单数据
    修改win8系统中启动管理器的系统引导信息
    tiny6410的QT4.7开发与移植
    VMware 6.5 下安装 Fedora 9
    格式字符串的输入输出
    linux C下多文件编译,以及Makefile的使用
    ARM学习——建立交叉编译环境
  • 原文地址:https://www.cnblogs.com/ditoly/p/CF856C.html
Copyright © 2020-2023  润新知