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

Обсуждение задачи 1495. Раз-два, раз-два 2

Help!!!
Послано OncescuCostin 21 мар 2012 01:15
Can anyone explain me what is yhe problem with my program.

#include<cstdio>
using namespace std;
int k,nr,n,p,u,i,j,obt[1000001],fol[1000001],ap[1000001],x[1000001],x1[1000001],cif[100];
char bst[1000002][32],cr[32];
int cmp(char a[32],int n,char b[32],int m)
{
    int i;
    if(n<m) return -1;
    if(n>m) return 1;
    for(i=1;i<=n;i++)
        if(a[i]!=b[i]) break;
    if(a[i]>=b[i]) return 1;
    else return -1;
}
int main()
{
//freopen("input","r",stdin);
//freopen("output","w",stdout);
scanf("%d",&n);
u=2;
x[1]=1%n;
x[2]=2%n;
ap[1%n]=1;
ap[2%n]=1;
obt[1%n]=1;
obt[2%n]=2;
fol[1%n]=1;
fol[2%n]=1;
bst[1%n][1]='1';
bst[2%n][1]='2';
for(i=2;i<=30;i++)
{
    p=0;
    for(j=1;j<=u;j++)
    {
        for(k=1;k<=fol[x[j]];k++)
            cr[k]=bst[x[j]][k];
        cr[k]='1';
        if(ap[(x[j]*10+1)%n]==0||cmp(bst[(x[j]*10+1)%n],fol[(x[j]*10+1)%n],cr,fol[x[j]]+1)>0)
        {
            ap[(x[j]*10+1)%n]=1;
            obt[(x[j]*10+1)%n]=1;
            fol[(x[j]*10+1)%n]=fol[x[j]]+1;
            for(k=1;k<=fol[x[j]]+1;k++)
                bst[(x[j]*10+1)%n][k]=cr[k];
            p++;
            x1[p]=(x[j]*10+1)%n;
        }
        cr[fol[x[j]]+1]='2';
        if(ap[(x[j]*10+2)%n]==0||cmp(bst[(x[j]*10+2)%n],fol[(x[j]*10+2)%n],cr,fol[x[j]]+1)>0)
        {
            ap[(x[j]*10+2)%n]=1;
            obt[(x[j]*10+2)%n]=2;
            fol[(x[j]*10+2)%n]=fol[x[j]]+1;
            for(k=1;k<=fol[x[j]]+1;k++)
                bst[(x[j]*10+2)%n][k]=cr[k];
            p++;
            x1[p]=(x[j]*10+2)%n;
        }

    }
    if(ap[0]==1) break;
    u=p;
    for(j=1;j<=u;j++)
        x[j]=x1[j];
}
nr=0;
if(ap[0]==0) printf("Impossible\n");
else
{
    for(i=1;i<=fol[0];i++)
        printf("%d",bst[0][i]-48);
    printf("\n");
}
return 0;
}