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

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

WA #15... I just don't understand what is wrong with my program.... Help me pls!
Послано intueor 9 фев 2014 18:06
Just give me some hint pls: intueor19@gmail.com
I really don't understand what is wrong... It passes all tests on that forum but still has WA15

#include <iostream>
#include <vector>

using namespace std;

vector < int > pm (30, 0);
vector < vector < char > > d (31, vector < char > (1000000, 0));
int n;

void printAnswer (int, int);

int main () {
    cin >> n;

    pm[0] = 1 % n;
    for (int i = 1; i < 30; ++i)
        pm[i] = (pm[i - 1] * (10 % n)) % n;

    d[0][0] = 1;
    char found = 0;

    for (int i = 1; i <= 30; ++i) {
        int m1 = pm[i - 1];
        int m2 = ((2 % n) * pm[i - 1]) % n;

        if (d[i - 1][(n - m1) % n] != 0) {
            printAnswer (1, i);
            found = 1;
            break;
        }

        if (d[i - 1][(n - m2) % n] != 0) {
            printAnswer (2, i);
            found = 1;
            break;
        }

        for (int j = 0; j < n; ++j) {
            if (d[i - 1][j] == 0)
                continue;

            d[i][(j + m2) % n] = 2;
            d[i][(j + m1) % n] = 1;
        }
    }

    if (!found)
        cout << "Impossible";

    return 0;
}


void printAnswer (int digit, int lvl) {
    int k = 0;
    int x, j;

    while (lvl != 0) {
        cout << (int)digit;
        j = ((digit % n) * pm[lvl - 1]) % n;
        x = (k >= j) ? (k - j) : (n - j + k);
        digit = d[lvl - 1][x];
        k = x;
        --lvl;
    }

    return;
}

I got AC with other code but I still don't understand what's wrong with this one. Help me PLS!!!

Edited by author 09.02.2014 19:37