題目解析:
有n個不同字元,每個字元次數為 a1, a2, … an;
如果不考慮重複字元數,那不同的字串個數就是∑(an)個字元的全排列
再除以重複的 a1到an各自全排列之和。
本題關鍵是全排列過程中整數範圍會超過int或者long long的範圍,需要用陣列儲存大整數自行實現大整數的乘除
#include
using namespace std;
/* an / sigma ai */
int num[26]
, res[
1000
], len =0;
// res陣列存的是大整數各位的數字,高位在前,方便擴充套件位和縮位
// sortres函式是將陣列res裡存的大整數轉成十進位制,把每一位大於9的進製
void
sortres()
res[i +1]
+= res[i]/10
; res[i]
= res[i]%10
;}}}
//函式a是計算全排列
voida(
int n)
sortres()
;}}//大整數除法
void
divideres
(int n)
res[i -1]
+= res[i]*10
; res[i]=0
;}else
res[i]
= res[i]
/ n;}}
}int
main()
memset
(num,0,
sizeof
(num));
memset
(res,0,
sizeof
(res));
long
long total =0;
//total是字元個數總數
for(
int i =
0; i < n; i++)a
(total)
;for
(int i =
0; i < n; i++)}
for(
int i = len -
1; i >=
0; i--
) cout << endl;
}}
43 字串相乘 大數相乘(字串相乘)
給定兩個以字串形式表示的非負整數num1和num2,返回num1和num2的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 2 num2 3 輸出 6 示例 2 輸入 num1 123 num2 456 輸出 56088 說明 num1和num2的長度小於110。num1和num2只包含...
大數相乘 43 字串相乘
給定兩個以字串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字串形式。示例 1 輸入 num1 2 num2 3 輸出 6 示例 2 輸入 num1 123 num2 456 輸出 56088 說明 num1 和 num2 的長度小於110。nu...
hdu2920 字串雜湊
模式串中 把它分成一截截,當某一截在s串中多個位置能找到匹配,找第乙個匹配點,貪心 因為當中間有 可以利用它跳過一些字元,當遇到 先跳過乙個字元,其他的一截截貪心去找到匹配位置,若最後剩餘偶數個字元,則match 第一截和最後一截如果是非 和 必須嚴格匹配 找來的雜湊寫法 include inclu...