[HDOJ1261]字串数
2015-09-02 23:46
495 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1261
解题思路很好想,设一共有n=n1+n2+...nk个字符,分别出现n1,n2,...nk次,则组合数有n!/(n1!n2!...nk!)种
难点在大数运算上
解题思路很好想,设一共有n=n1+n2+...nk个字符,分别出现n1,n2,...nk次,则组合数有n!/(n1!n2!...nk!)种
难点在大数运算上
#include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <iostream> #include <cmath> #include <queue> #include <map> #include <set> #include <stack> #include <list> #include <vector> using namespace std; int ans[500]; int has[27]; int n, s; void division(int n, int m) { int c = 0; for(int i = 0; i < 500; i++) { c = ans[i] * n + c; ans[i] = c % 10; c /= 10; } c = 0; for(int i = 499; i >= 0; i--) { c = ans[i] + c * 10; ans[i] = c / m; c %= m; } } int main() { // freopen("in", "r", stdin); while(~scanf("%d", &n) && n) { s = 0; memset(ans, 0, sizeof(ans)); ans[0] = 1; for(int i = 0; i < n; i++) { scanf("%d", &has[i]); for(int j = 1; j <= has[i]; j++) { division(s+j, j); } s += has[i]; } int i; for(i = 499; i >= 0; i--) { if(ans[i]) { break; } } for(int j = i; j >= 0; j--) { printf("%d", ans[j]); } printf("\n"); } }
相关文章推荐
- 【索引】Fundamentals
- 决定命运的有很多
- 绘图与动画之使用CAKeyframeAnimation实现仿WP水滴加载动画
- IOS-开发日志-UITextField属性
- javascript里的几个特殊值
- IOS-开发日志-UITextField属性
- Linux下解压rar格式的压缩文件
- C#编程总结(一)序列化
- Microsoft Dynamics CRM 2015 报表开发 入门 SQL Server Data Tools 开发
- Microsoft Dynamics CRM 2015 报表开发 入门 SQL Server Data Tools 开发
- tomcat异常之org.apache.catalina.LifecycleException:
- poj1182->食物连->并查集
- C#编程总结(二)多线程基础
- 负载均衡器测试过程
- 【索引】Chapter 5. Graph Theory
- ios 正则表达式入门
- Jetty应用服务器的安装详解
- 《机器学习实战》学习笔记:决策树的实现
- MySQL学习笔记(3) - 查询服务器版本,当前时间,当前用户
- C#编程总结(三)线程同步