UVA 11076 Add Again

1194 단어
제목 링크:http://vjudge.net/contest/view.action?cid=46225#problem/G
제목 은 몇 개의 수 를 정 하고 그들의 모든 배열 의 합 을 구 하 는 것 이다.
처음에 STL 로 시간 을 초과 해서 좋 은 방법 이 생각 나 지 않 아서 대신 에 게 물 어 봤 습 니 다. 알 겠 습 니 다. 
일단 다 배열 되 어 있 기 때문에 각 위치 에 있 는 평균 수 는 같 을 거 예요. 
그리고 모든 배열 방식 * 자릿수 를 곱 하면 됩 니 다.
sum=(a[1]+a[2]+....+a[n])/n*A(n,n)/A(num[a[1]])/..../A(num[a[n]])*(111..1);
#include<cstdio>
#include<cstring>
long long one[13] =
{
    0, 1, 11, 111, 1111, 11111, 111111, 1111111, 11111111,
    111111111, 1111111111, 11111111111, 111111111111
};
  
long long a[10], fac[13];//factorial
  
int main(void)
{
    int n, num, count;
    long long ans;
    fac[0] = 1;
    for (int i = 1; i <= 12; i++)
        fac[i] = i * fac[i - 1];///    
    while (scanf("%d", &n), n)
    {
        memset(a, 0, sizeof(a));
        count = 0;
        for (int i = 0; i < n; i++)
        {
            scanf("%d", &num);
            count += num;
            a[num]++;
        }
        ans = fac[n - 1] * count;
        for (int i = 0; i < 10; ++i)
            ans /= fac[a[i]];
        printf("%lld
", ans * one[n]); } }

좋은 웹페이지 즐겨찾기