hdu 5651
来源:互联网 发布:碳微球 知乎 编辑:程序博客网 时间:2024/06/06 05:00
#include <iostream>#include <string.h>using namespace std;typedef __int64 lld;string s;lld T,factor[1010],ans,k,num[550],odd,level;lld n, m, p;lld Ext_gcd(lld a,lld b,lld &x,lld &y){ if(b==0) { x=1, y=0; return a; } lld ret= Ext_gcd(b,a%b,y,x); y-= a/b*x; return ret;}lld Inv(lld a,int m){ ///求逆元 lld d,x,y,t= (lld)m; d= Ext_gcd(a,t,x,y); if(d==1) return (x%t+t)%t; return -1;}lld Cm(lld n, lld m, lld p) ///组合数学{ lld a=1, b=1; if(m>n) return 0; while(m) { a=(a*n)%p; b=(b*m)%p; m--; n--; } return (lld)a*Inv(b,p)%p; ///(a/b)%p 等价于 a*(b,p)的逆元}lld Lucas(lld n, lld m, lld p) ///把n分段递归求解相乘{ if(m==0) return 1; return (lld)Cm(n%p,m%p,p)*(lld)Lucas(n/p,m/p,p)%p;}int main(){ cin>>T; while (T--) { cin>>s; ans=1; k=0; odd=0; level=0; memset(num,0,sizeof(num)); memset(factor,0,sizeof(factor)); for (int i=0;i<s.length();i++) num[s[i]-'a']++; for (int i=0;i<=25;i++) if (num[i]!=0) { if (num[i] % 2 !=0) { odd++; num[i]--; } level=level+num[i]/2; k++; factor[k]=num[i]/2; } if (odd>1) cout<<0<<endl; else { for (int i=1;i<=k;i++) { ans=(1000000007+ans*Lucas(level,factor[i],1000000007) )%1000000007; level=level-factor[i]; } cout<<ans<<endl; } } retur
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
- 在Android中使用java代码中的gayout_gravity和gravity这两个属性。
- wince窗体假死
- Vue 路由嵌套、数据请求、组件
- 通过js判断浏览器的版本
- 安卓复习梳理
- hdu 5651
- Bootstrap3.3.7全面解读和Bootstrap4.0变化分析----------004(4.0变化分析)
- hdu 5583
- 每周Apache commons-SystemUtils
- 微信抢红包的架构设计
- 三、JVM之对象的创建
- 数据库事务(二)
- POJ 3104 Drying
- hdu 5572