SPOJ ONEZERO (единицы и нули)

0

Я пытаюсь решить проблему здесь, используя BFS и сохраняя остаток и обновляя его. Тем не менее, я получаю TLE при этом, как я могу его устранить?

int t,n,i,j,z,y;

string l,m;
scanf("%d",&t);
while(t--)
{
    scanf("%d",&n);
    pair<string,int>b;
    queue<pair<string,int> >a;
    b=make_pair("1",1);
    a.push(b);
    bool r[20001]={0};
    while(!a.empty())
    {
        b=a.front();
        a.pop();
       // cout<<b.first<<endl;
        if(b.second%n==0)
        {
            printf("%s\n",b.first.c_str());
            break;
        }
        m=b.first;
        y=b.second;
        z=(y*10)%n;
        if(r[z]==0)
        {    r[z]=1;
             l=m+'0';
        b=make_pair(l,z);
        a.push(b);
        }

        z=(y*10+1)%n;
        if(r[z]==0)
        {    r[z]=1;
             l=m+'1';
        b=make_pair(l,z);
        a.push(b);
        }
    }
}
  • 0
    Не могли бы вы объяснить, как работает ваш код?
  • 0
    Вопрос в том, чтобы найти наименьшее число, состоящее только из 0 и 1, делимых на n. Я использую bfs и имею очередь, состоящую из этого числа в виде строки и остатка в одной паре. Сначала я вставляю 1, а затем добавляю 0 и 1 в очередь, если остаток равен 0, тогда я печатаю ответ и разрываю цикл
Показать ещё 4 комментария
Теги:
optimization

1 ответ

0
Лучший ответ

Подумайте об этом по-другому. У вас есть a_i = (10^i) % n, и вы хотели бы найти такое b_i = 0..1 что sum(a_i * b_i, i) % n = 0. Похоже, это задача динамического программирования.

У вас есть массив m где m[i][j] = true означает "Я могу представить число k нулей и единиц, таких, что k % n == j, и для этого нам нужно не больше i цифр".

В вашей формуле DP у вас есть m[i+1][j] = m[i+1][(j + 10^i) % n] = true когда m[i][j] = true.

Чтобы показать это число, вам нужно отступить от вашего m от m[somewhere][0] = true.

Перед отправкой проверьте свое решение на все возможные n, так как их довольно мало (всего 20000). Я думаю, вы могли бы даже предварительно создать все решения и написать решение для поиска массива.

  • 0
    Можете ли вы уточнить это подробнее ???

Ещё вопросы

Сообщество Overcoder
Наверх
Меню