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

Обсуждение задачи 1057. Количество степеней

Please help me i get WA...
Послано Pooya 5 мар 2003 16:38
here is my code :



var
  xx               :array[0..32]of byte;
  Pb               :array[0..32]of longint;
  d                :array[1..32,0..20]of longint;
  x,y,m,k,b,I,J,num:longint;
  Ans,ki           :longint;

function c(x,y:integer):longint;
var
  ans,i:longint;
begin
  ans:=1;
  if y<x-y then
    y:=x-y;
  for I:=y+1 to x do
    ans:=ans*I;
  for I:=1 to x-y do
    ans:=ans div i;
  c:=ans;
end;

procedure solve(x,y:integer);
begin
  if xx[i]>1 then
    d[i,j]:=2*c(i-1,j)
  else
  if xx[i]=1 then
    d[i,j]:=c(i-1,j)+d[i-1,j-1]
  else
    d[I,J]:=d[I-1,J];
end;

begin
  read(y);read(x);read(ki);read(b);
  if y>x then
  begin m:=x;x:=y;y:=m; end;


  m:=x;
  while m>0 do
  begin
    inc(xx[0]);
    xx[xx[0]]:=m mod b;
    m:=m div b;
  end;

  Pb[0]:=1;
  for I:=1 to xx[0] do
    Pb[I]:=Pb[I-1]*b;

  if xx[1]>0 then d[1,0]:=1;
  if xx[1]>1 then
    d[1,1]:=1
  else
    d[1,1]:=0;

  for I:=2 to xx[0] do
    for J:=0 to Ki do
      solve(i,j);

  ans:=d[xx[0],ki];
  j:=0;
  for I:=1 to xx[0] do
    if xx[i]=1 then inc(j);
  if j=ki then inc(ans);

  fillchar(xx,sizeof(xx),0);
  m:=y;xx[0]:=0;
  while m>0 do
  begin
    inc(xx[0]);
    xx[xx[0]]:=m mod b;
    m:=m div b;
  end;

  fillchar(d,sizeof(d),0);

  if xx[1]>0 then d[1,0]:=1;

  if xx[1]>1 then
    d[1,1]:=1
  else
    d[1,1]:=0;

  for I:=2 to xx[0] do
    for J:=0 to Ki do
      solve(i,j);

  writeln(ans-d[xx[0],Ki]);
end.

please help me
i realy don't know why it gets WA.
thanks
pooya
{pooyahat@yahoo.com}