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

Обсуждение задачи 1012. K-ичные числа. Версия 2

Where is my mistakes?
Послано Elmi Ehmedov 22 окт 2010 10:12
why wa#1 ???

#include <cstdlib>
#include <iostream>

using namespace std;

int a[2000],b[2000];
int c[2000][2000];
int en;

int sum(int k,int p)
{
  int top[4000];
  int i,j=0;
  int y=0,t;

  if (k > p)
   {
     for (i=k;i>=k-p;i--)
      b[i]=b[i-(k-p)];
     for (i=0;i<k-p;i++)
      b[i]=0;
     en=k;
   }
  else if (p > k)
   {
     for (i=p;i>=p-k;i--)
      a[i]=a[i-(p-k)];
     for (i=0;i<p-k;i++)
      a[i]=0;
     en=p;
   }
  else if (k == p) en=k;

  for (i=en-1;i>=0;i--)
   {
     t=a[i]+b[i]+y;
     if (t > 9)
      {
        t-=10;
        y=1;
        top[j]=t; j++;
      }
     else {top[j]=t; j++; y=0;}
   }
  if (y == 1) {top[j]=y; j++;}
  int l=0;
  for (i=j-1;i>=0;i--)
   {
    a[l]=top[i];
    l++;
   }
  return l;
}

int multi(int k,int p,int n)
{
  int tp[5000];
  int cv[4000];
  int y=0,v=0,vy,uz;
  int i,l=0,j,sy=0;

  for (i=0;i<=4000;i++) tp[i]=0;
  for (i=k-1;i>=0;i--)
   {
     v=(a[i]*p)+vy;
     if (v > 9)
      {
       vy=v / 10;
       v-=(vy*10);
      }
     else vy=0;
     cv[l]=v; l++;
     if (vy > 0) {cv[l]=vy; l++;}
     l+=sy;
     for (j=l-1;j>=sy;j--) cv[j]=cv[j-sy];
     for (j=0;j<sy;j++) cv[j]=0;
     for (j=0;j<l;j++)
      {
       uz=l-1;
       tp[j]+=cv[j]+y;
       if (tp[j] > 9)
        {
          tp[j]-=10;
          y=1;
        }
       else y=0;
      }
     for (j=0;j<l;j++) cv[j]=0;
     if (y == 1) { uz++; tp[uz]=y; }
     l=0; vy=0; sy++; y=0;
   }
  l=0;
  while (tp[uz] <= 0) uz--;
  for (j=uz;j>=0;j--)
   {
     c[n][l]=tp[j];
     l++;
   }
  return l;
}

int main()
{
    int n,k,i,j,u;
    int uz[2000];


    cin>>n>>k;
    c[0][0]=1; c[1][0]=k-1;
    uz[0]=1; uz[1]=1;
    for (i=2;i<=n;i++)
     {
       for (j=0;j<uz[i-1];j++) a[j]=c[i-1][j];
       for (j=0;j<uz[i-2];j++) b[j]=c[i-2][j];
       u=sum(uz[i-1],uz[i-2]);
       uz[i]=multi(u,k-1,i);
     }

    for (i=0;i<uz[n];i++)
     cout<<c[n][i];
    cout<<endl;

    return EXIT_SUCCESS;
}