HDU 5651
来源:互联网 发布:遗传算法 排课系统 编辑:程序博客网 时间:2024/06/05 05:57
居然忘记了高中的组合数公式
在计算组合数取模的过程中很难处理除法。。。
所以要用到C(N,M)=C(N-1,M-1)+C(N-1,M)
从C(1,1)一直递推,就可以避免除法了…
要注意初始化C(i,0)=1;没初始化这个wa了好久…没注意样例都不能过…
在递推求C数组的时候记得取模…
大概的注意事项就这些了吧…
剩下的就是用高中知识解决了…
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>#define mod 1000000007using 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;}
0 0
- HDU 5651
- hdu 5651
- hdu 5651
- HDU 5651
- hdu 5651
- HDU 5651组合数
- HDU 5651 (组合 水~)
- hdu 5651 反省
- HDU 5651 组合数学
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- 阿里云美国服务器上架设VPN/代理不能访问facebook TW
- 字典转模型之KVC和MJExtension底层实现
- iOS中几种数据持久化方案-转自简书
- HDOJ-----1060简单数学题
- 《C++》06 C++ 存储类
- HDU 5651
- CRCK array 1.5 (easy)
- Linux 每天定时重启
- 从零开始学_JavaScript_系列(一)初步概念、工具选择、简单内容输出、加载js文件
- 提交github常见问题
- VMware12中的Linux系统利用NAT网络连接方式访问外网配置
- Java并发编程:Lock(上)
- Java并发编程:Lock(下)
- 标量子查询改写