记录编号 492046 评测结果 AAAAAAAAAA
题目名称 [HAOI 2010]计数 最终得分 100
用户昵称 Gravatar路人甲 是否通过 通过
代码语言 C++ 运行时间 0.090 s
提交时间 2018-03-22 20:45:22 内存使用 6.48 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
ll c[1010][1010],ans;
char ss[100];
int len,s[100],cnt[20];
inline ll work(int m){
    ll ans=1;
    //cout<<ans<<" "<<m<<endl;
    for (int i=0;i<10;++i) if (cnt[i]) ans*=c[m+1][cnt[i]+1],m-=cnt[i];
    //cout<<ans<<endl;
    return ans;
}

int main()
{
    freopen("perm.in","r",stdin);
    freopen("perm.out","w",stdout);
    c[1][1]=1;
    for (int i=2;i<=1000;++i){
        for (int j=1;j<=1000;++j){
            c[i][j]=c[i-1][j]+c[i-1][j-1];
        }
    }
    gets(ss);
    len=strlen(ss)-1;
    for (int i=0;i<len;++i) s[i]=ss[i]-'0';
    for (int i=0;i<len;++i) ++cnt[s[i]];
    for (int i=0;i<len;++i){
        for (int j=0;j<s[i];++j){
            if (cnt[j]){
                cnt[j]--;
                ans+=work(len-i-1);
                cnt[j]++;
                //printf("%d\n",len-i-1);
            }
        }
        --cnt[s[i]];
    }
    cout<<ans;
    return 0;
}