NC229276. Bus Number
描述
输入描述
第一行包含一个整数,表示牛牛看到的公交车编号。
保证这个数字不以0开头。
输出描述
输出一个整数表示答案。
示例1
输入:
97
输出:
2
说明:
只可能是97和79示例2
输入:
2028
输出:
13
说明:
可能的公交车编号(按升序)如下:208、280、802、820、2028、2082、2208、2280、2802、2820、8022、8202、8220。C++ 解法, 执行用时: 7ms, 内存消耗: 472K, 提交时间: 2021-10-14 22:08:12
#include<bits/stdc++.h> using namespace std; long long n, ans, fac[19], su, uc = 1, f; int a[10]; vector<int>v; void dfs(int x) { if (x == v.size()) ans += fac[su - 1] * (su - f) / uc; else for (int i = 1; i <= a[v[x]]; i++) { if (!v[x]) f = i; su += i, uc *= fac[i], dfs(x + 1), uc /= fac[i], su -= i; } } signed main() { fac[0] = 1; for (int i = 1; i < 19; i++) fac[i] = fac[i - 1] * i; cin >> n; while (n) a[n % 10]++, n /= 10; for (int i = 0; i < 10; i++) if (a[i]) v.push_back(i); dfs(0); cout << ans; }