题解报告:hdu 1261 字串数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1261
Problem Description
给定若干字母和它们相应的个数,计算一共可以组成多少个不同的字符串.
Input
Output
Sample Input
Sample Output
解题思路:这道题考察全排列知识:考虑n个元素组成的多重集,其中a1重复了n1次,a2重复了n2次,…,ak重复了nk次,n=n1+n2+…+nk.
考虑n个元素的全排列,则不同的排列数为:n!/(n1!*n2!*n3!……nk!);因为12*26=312的阶乘肯定造成数据溢出,所以要用数组来保存每一位。这道题的做法是先对当前每一种字母的个数加到s变量中,从j=1开始依次对当前的每位进行(s+j)相乘,再从高位开始枚举除以b[i]的阶乘,这样的话就简单了,大数乘法+大数除法+数组存储。。。
AC代码:
#include<bits/stdc++.h>
using namespace std;
int a[],b[];//a数组来保存结果,b数组是来存每种字母的个数
int main()
{
int n,tmp,s,g;
while(cin>>n&&n){
memset(a,,sizeof(a));
s=,a[]=;//0的阶乘是1
for(int i=;i<n;i++){//表示有n种字母
cin>>b[i];
for(int j=;j<=b[i];j++){//从1开始枚举到当前的b数组元素
tmp=;//中间值
for(int k=;k<=;k++){//从低位开始向高位枚举当前结果的每一位
tmp=a[k]*(s+j)+tmp;//先乘上(s加上当前每一位)这里的for先计算字母总个数的阶乘
a[k]=tmp%;//只留小于10的数
tmp/=;//除数保存在tmp中
}
tmp=;//可以直接将tmp置为0,因为550够保存12*26阶乘结果的长度了,顺便除以当前数组b元素b[i]的阶乘
for(int k=;k>=;k--){//从高位开始枚举除法,参照公式
tmp=a[k]+tmp*;//与乘法相反,tmp做中间量乘以10
a[k]=tmp/j;//枚举当前每一位去除以j
tmp%=j;//取余当前除数并保存在tmp中
}
}
s+=b[i];//将每种字母的个数加到s
}
for(g=;g>=;g--)
if(a[g])break;//当最高位不为0是直接跳出
for(int i=g;i>=;i--)
cout<<a[i];//从高位(右边)输出
cout<<endl;
}
return ;
}
题解报告:hdu 1261 字串数的更多相关文章
- HDU 1261 字串数(排列组合)
字串数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- hdu 1261 字串数
解题思路:ACM紫书 第十章 P319 有重复元素的全排列 答案: 所有数的和的阶乘 除以 每个数阶乘的乘积 因为给定 (26*12)! 会爆掉(long long),这里用java 的BigInte ...
- HDOJ 1261 字串数
JAVA大数.... 字串数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- 字串数_hdu_1261(大数极致).java
字串数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- ACM题目————字串数
Description 一个A和两个B一共可以组成三种字符串:"ABB","BAB","BBA". 给定若干字母和它们相应的个数,计算一共可 ...
- hdu 4333 扩展kmp+kmp重复字串去重
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4333 关于kmp next数组求最短重复字串问题请看:http://www.cnblogs.com/z ...
- 题解报告:hdu 2093 考试排名
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2093 Problem Description C++编程考试使用的实时提交系统,具有即时获得成绩排名的 ...
- 题解报告:hdu 2069 Coin Change(暴力orDP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2069 Problem Description Suppose there are 5 types of ...
- 题解报告:hdu 1028 Ignatius and the Princess III(母函数or计数DP)
Problem Description "Well, it seems the first problem is too easy. I will let you know how fool ...
随机推荐
- cocos2d-x 2.0下怎样让BOX2D DEBUG DRAW的方法笔记
原文链接: 这两天玩 cocos2d-x 和 box2d,发现 cocos2d-x 2.0 版本号要使用老方法 debug 渲染会出错.于是找到了新方法来 debug draw: 首先在你的头文件中添 ...
- ubuntu重新启动网卡
1.关闭接口:sudo ifconfig eth0 down 2.然后打开:sudo ifconfig eth0 up
- 【剑指Offer面试题】 九度OJ1517:链表中倒数第k个结点
鲁棒性是指程序可以推断输入是否符合规范要求,并对不和要求的输入予以 合理的处理. 题目链接地址: http://ac.jobdu.com/problem.php?pid=1517 题目1517:链表中 ...
- Thinkpad升级Window10无法安装expresscache
本人有一台Thinkpad T440s,自从看了这篇帖子12秒开机!ExpressCache SSD缓存加速,就给自己的小黑加持了一块固态硬盘.使用后效果确实很明显. 问题 自从系统自动升级到wind ...
- linux document and directory find
http://suchalin.blog.163.com/blog/static/55304677201062924959497/ Linux 查看文件夹大小及文件数量命令 2010-07-29 14 ...
- [IT学习]阿铭Linux 微信公众号 每日一题 解析
1.shell习题171020公布的昨日答案 习题171019 - 打印正方形 #!/bin/bash read -p "please input a number:" sum a ...
- [IT学习]Python pandas 学习
今天学习pandas来处理数据,结果用python 3.5.0的shell来调试,总是报错. 报错中包含如下字样: Traceback (most recent call last): File &q ...
- ubuntu 文件及子文件夹的权限的查看及修改
查看linux文件的权限: 查看path路径下名为filename的文件或文件夹的权限: * -R 结果:全部子目录及文件权限改为 777
- HDU1151 Air Raid —— 最小路径覆盖
题目链接:https://vjudge.net/problem/HDU-1151 Air Raid Time Limit: 2000/1000 MS (Java/Others) Memory L ...
- YTU 2845: 编程题AB-卡片游戏
2845: 编程题AB-卡片游戏 时间限制: 1 Sec 内存限制: 128 MB 提交: 30 解决: 13 题目描述 小明对数字的序列产生了兴趣: 现有许多张不同的数字卡片,用这若干张卡片能排 ...