0
点赞
收藏
分享

微信扫一扫

UVA 11076 Add Again——计数原理

金刚豆 2022-08-17 阅读 149


注意先乘后除否则会有精度损失

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define OUT freopen("out.txt", "w", stdout)
using namespace std;
typedef long long ll;
const int maxn = 15;
const ll one[] = {0, 1, 11, 111, 1111, 11111, 111111, 1111111, 11111111, 111111111, 1111111111, 11111111111, 111111111111};
ll n, a[maxn];
ll cnt, val[maxn], num[maxn], sum;
int main() {
//OUT;
while (~scanf("%lld", &n) && n) {
sum = 0;
for (int i = 1; i <= n; i++) {
scanf("%lld", &a[i]);
sum += a[i];
}
sort(a + 1, a + 1 + n);
memset(num, 0, sizeof(num));
val[1] = a[1];
num[1] = 1;
cnt = 1;
for (int i = 2; i <= n; i++) {
if (a[i] != a[i - 1]) ++cnt;
val[cnt] = a[i];
num[cnt]++;
}
ll n1 = 1, n2 = 1;
for (int i = 1; i <= n; i++) n1 *= i;
for (int i = 1; i <= cnt; i++) {
for (int j = 1; j <= num[i]; j++) n2 *= j;
}
ll k = n1 / n2;
ll ans = sum * k / n * one[n];
printf("%lld\n", ans);
}
return 0;
}




举报

相关推荐

0 条评论