[HDOJ1261]字串数

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1261

解题思路很好想,设一共有n=n1+n2+...nk个字符,分别出现n1,n2,...nk次,则组合数有n!/(n1!n2!...nk!)种

难点在大数运算上

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <iostream>
 6 #include <cmath>
 7 #include <queue>
 8 #include <map>
 9 #include <set>
10 #include <stack>
11 #include <list>
12 #include <vector>
13
14 using namespace std;
15
16 int ans[500];
17 int has[27];
18 int n, s;
19
20 void division(int n, int m) {
21     int c = 0;
22     for(int i = 0; i < 500; i++) {
23         c = ans[i] * n + c;
24         ans[i] = c % 10;
25         c /= 10;
26     }
27     c = 0;
28     for(int i = 499; i >= 0; i--) {
29         c = ans[i] + c * 10;
30         ans[i] = c / m;
31         c %= m;
32     }
33 }
34
35 int main() {
36     // freopen("in", "r", stdin);
37     while(~scanf("%d", &n) && n) {
38         s = 0;
39         memset(ans, 0, sizeof(ans));
40         ans[0] = 1;
41         for(int i = 0; i < n; i++) {
42             scanf("%d", &has[i]);
43             for(int j = 1; j <= has[i]; j++) {
44                 division(s+j, j);
45             }
46             s += has[i];
47         }
48         int i;
49         for(i = 499; i >= 0; i--) {
50             if(ans[i]) {
51                 break;
52             }
53         }
54         for(int j = i; j >= 0; j--) {
55             printf("%d", ans[j]);
56         }
57         printf("\n");
58     }
59 }
时间: 2024-10-12 19:25:57

[HDOJ1261]字串数的相关文章

HDOJ 1261 字串数

JAVA大数.... 字串数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2893    Accepted Submission(s): 679 Problem Description 一个A和两个B一共可以组成三种字符串:"ABB","BAB","BBA". 给定若干字母和它们相应

字串数 排练组合(阶乘) java秒

字串数 题目抽象:给定若干字母和它们相应的个数,计算一共可以组成多少个不同的字符串. 1 import java.math.*; 2 import java.util.*; 3 import java.io.*; 4 import java.text.*; 5 6 public class Main 7 { 8 9 public static void main(String[] args) 10 { 11 Scanner cin=new Scanner(new BufferedInputStr

Hdu 1261字串数

字串数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4683    Accepted Submission(s): 1234 Problem Description 一个A和两个B一共可以组成三种字符串:"ABB","BAB","BBA".给定若干字母和它们相应的个数,计算一共可以组成

hdu 1261 字串数 排列组合

字串数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3505    Accepted Submission(s): 855 Problem Description 一个A和两个B一共可以组成三种字符串:"ABB","BAB","BBA". 给定若干字母和它们相应的个数,计算一共可以组

HDU 1261 字串数

字串数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 3187    Accepted Submission(s): 757 Problem Description 一个A和两个B一共可以组成三种字符串:"ABB","BAB","BBA".给定若干字母和它们相应的个数,计算一共可以组成多

Problem1261 字串数

字串数 http://acm.hdu.edu.cn/showproblem.php?pid=1261 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5281    Accepted Submission(s): 1398 Problem Description 一个A和两个B一共可以组成三种字符串:"ABB","BA

ACM题目————字串数

Description 一个A和两个B一共可以组成三种字符串:"ABB","BAB","BBA". 给定若干字母和它们相应的个数,计算一共可以组成多少个不同的字符串. Input 每组测试数据分两行,第一行为n(1<=n<=26),表示不同字母的个数,第二行为n个数A1,A2,...,An(1<=Ai<=12),表示每种字母的个数.测试数据以n=0为结束. Output 对于每一组测试数据,输出一个m,表示一共有多少种字符

组合数学 + 大数乘法 + 大数除法 之 hdu 1261 字串数

//  [3/17/2015 JmingS] /* 此题可直接推导出公式: {(A1+A2+……+An)!} / {A1!A2!……An!} 由于 (12×26)! = 312! 只能通过数组来存储,所以又涉及『大数乘法』和『大数除法』, 大数实现的主要思想模拟手算,具体参考程序. */ 1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5

JS 判断字串字节数,并截取长度

JS 判断字串字节数,并截取长度 var matchWords; function notifyTextLength() { var inputNum = document.getElementById("txtTitle").value.replace(/[^\x00-\xff]/g, "**").length; //得到输入的字节数 if (inputNum <= 200) { matchWords = document.getElementById(&q