ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1402. Коктейли

WA#13 WHY?
Послано snowfly 14 июл 2009 09:56
#include<iostream>
using namespace std;
int fac[100000],ans[100000],len,alen;
int main (void){
    int n;cin>>n;
    alen=1;
    memset(ans,0,sizeof(ans));
    for (int i=2;i<=n;++i){
        memset(fac,0,sizeof(fac));
        len=1;fac[0]=1;
        for (int j=n;j>n-i;--j){
            for (int k=0;k<len;++k)
                fac[k]*=j;
            for (int k=0;k<len;++k)
                if (fac[k]>=10){
                    fac[k+1]+=fac[k]/10;
                    fac[k]%=10;
                }
            if (fac[len]!=0){
                ++len;
                if (fac[len-1]>=10){
                    fac[len]=fac[len-1]/10;
                    fac[len]%=10;
                    ++len;
                }
            }
        }
        for (int j=0;j<min(alen,len);++j)
            ans[j]+=fac[j];
        if (alen<len){
            for (int j=alen;j<len;++j)
                ans[j]=fac[j];
            alen=len;
        }
        for (int j=0;j<alen;++j)
            if (ans[j]>9){
                ans[j+1]+=ans[j]/10;
                ans[j]%=10;
            }
        while (ans[alen]!=0){
            ++alen;
            ans[alen]+=ans[alen-1]/10;
            ans[alen-1]%=10;
        }
    }
    for (int i=alen-1;i>=0;--i)
        cout<<ans[i];
    cout<<endl;
    return 0;
}