Блог пользователя begoon

Автор begoon10 месяцев назад, По-русски

А было бы возможно подключить еще один язык - Go? 

Интересный язык, и практиковаться на нем было бы полезно.

Полный текст »

 
 
 
 
  • Проголосовать: нравится  
  • -7
  • Проголосовать: не нравится  

Автор begoon15 месяцев назад, По-русски
UPDATE: Задача решена быстрее, чем за два часа. Первое правильное решение получено от Artemev Vasiliy.

Разного рода "ненормальное" программирование весьма популярно среди любителей поломать голову над разными задачками. Порой программу для очередной "ненормальной" среды программирования уже нереально написать вручную, а надо писать генератор, создающий код.

В задаче, что предлагаю я, программы все еще можно писать вручную на некотором высокоуровневом макроассемблере.

Итак, имеется модель некоторого виртуального процессора, выполняющего только одну логическую операцию - Стрелку Пирса.

На этом процессоре написана программа, на вход которой подается некоторый пароль. Если пароль неверный, то в ответ выдается строка "Wrong password!". Если верный, то выдается определенное волшебное сообщение.

Задача: любым образом выяснить это волшебное сообщение. Как вариант, можно, например, угадать пароль, и программа сама выдаст секрет.

Логика написана таким образом, что разобравшись в алгоритме, можно без труда расшифровать волшебное сообщение.

Раньше я описывал использованный подход во всех деталях.

Оригинальный подход, на котором основан мой эксперимент, был не совсем "чистым", так как команда сложения был вынесена за логику процессора. В моей версии все до единой команды реализованы на самом процессоре. Для этого потребовалось немного изменить интерпретатор, добавив в него сдвиговый регистр.

Для желающих попробовать взломать мой эксперимент, я сделал страничку, на которой на JavaScript'e реализован выше описанный виртуальный процессор с одной командой и программа для него, проверяющая пароль.

Итак, ссылка на задачу: http://demin.ws/norcpu/norcpu.html

Удачи.

P.S. Для первого взломавшего - небольшой приз! Информация по ссылке.

Полный текст »

 
 
 
 
  • Проголосовать: нравится  
  • +10
  • Проголосовать: не нравится  

Автор begoon16 месяцев назад, По-русски

Мое решение (ниже) - это ДП, в котором для каждой клумбы перебираются все предыдующие клумбы, из которых можно прийдти в текущую. Для каждой такой пары (текущая <-> какая-то сзади) перебираются все возможные варианты деревьев. Итого, решение O(M*M*N*N). Но, увы, на каком-то из непервых тестов получаю WA. То есть решение вроде бы верно, но не совсем ;-).

Подскажите проблему, кто видит.

void solve(istream& is, ostream& os) {

  int M;
  is >> M;
  vector<int> w(M), e(M);
  for (int i = 0; i < M; ++i)
    is >> w[i] >> e[i];

  int N;
  is >> N;
  vector<int> p(N);
  for (int i = 0; i < N; ++i)
    is >> p[i];

  vector<vector<int> > dp(M, vector<int>(N, 0));

  for (int i = 0; i < M; ++i)
    dp[i][0] = 1;
       
  for (int i = 1; i < N; ++i) {
    for (int j = 0; j < M; ++j) {
      for (int i0 = 0; i0 < i; ++i0) {
        for (int j0 = 0; j0 < M; ++j0) {
          if (p[i0] + e[j0] <= p[i] && p[i] - w[j] >= p[i0])
            dp[j][i] = max(dp[j][i], dp[j0][i0] + 1);
        }
      }
    }
  }

  int ans = 0;

  for (int i = 0; i < M; ++i)
    ans = max(ans, dp[i][N - 1]);

  os << ans << endl;
}

Полный текст »

 
 
 
 
  • Проголосовать: нравится  
  • -5
  • Проголосовать: не нравится  

Автор begoon17 месяцев назад, По-русски
http://acmp.ru/index.asp?main=task&id_task=433

Подскажите идею динамики. Судя по ограничению в 10^6 там требуется максимум n*log(n) решение. 

У меня пока, увы, только квадратичное, которые, ясное дело, падает с TLE:

void solve(istream& is, ostream& os) {
  int n;
  string s;
  is >> n >> s;
  vector<int> dp(n, 0);
  unsigned long long ans = 0;
  for (int i = 0; i < n; ++i) {
    dp[i] = s[i] == 'a' ? +1 : -1;
    for (int j = 0; j < i; ++j) {
      dp[j] += dp[i];
      if (dp[j] == 0)
        ans += 1;
    }
  }
  os << ans << endl;
}

Не пойму, как делать половинное деление, чтобы получить log(n), ведь приходится проверять подстроки не только в кусках с границами в 1/2, 1/4, 1/8 и т.д., но пересекающие их.

Полный текст »

 
 
 
 

Автор begoon19 месяцев назад, По-русски
Есть задача про Фотографа-зануду

Лично я осилил ее несколько "с фланга", а не составлением динамики, то есть сбрутфорсил полным перебором решения для размерностей до 5-6, и через известную базу данных последовательностей получил формулу (к счастью, такая последовательность там была).

Вопрос номер 1: вообще, для мира спортивного решения "канает" такое решение? Я имею ввиду использование этой базы данных для решение задач, вместо честного вывода формулы.

Вопрос номер 2: в обсуждении этой задачи на Тимусе даются две динамики, смысл которых мне не удается пока постичь.

№1

a[i][1] = a[i - 1][1] + a[i - 1][2],
a[i][2] = a[i - 1][2] + a[i - 3][2]

№2

a[i][1] = a[i-1][1] + a[i-2][2]
a[i][2] = a[i-2][1] + 1

Может кто-нибудь просто словами проговорить физический смысл a[i,t] в обоих случаях? Ясно, что i - это длина ряда в текущей подзадаче, а вот что такое t?

Полный текст »

 
 
 
 
  • Проголосовать: нравится  
  • +3
  • Проголосовать: не нравится  

Автор begoon20 месяцев назад, По-русски
Подскажите начинающему: есть базовая динамика для задач про правильные скобочные последовательности (ПСП).

F(n, k) - количество ПСП длиной n и разницей между количеством открывающихся и закрывающихся скобок (глубиной) k:

F(n, k) = F(n-1, k-1) + F(n-1, k+1).

Многие задачи про скобки к ней сводятся. Но есть такой вариант, когда надо найти количество правильных скобочных последовательностей из n открывающихся скобок, причем максимальная глубина на всей строке (разница между открывающимися и закрывающимися скобками) должна быть равна k. Например, для n=3 и k=2 последовательность ()(()) верная (глубина 2), а ((())) нет (глубина 3).

Подскажите идею динамики тут. Если удасться подтолкнуть в нужном направлении, но без приведения непосредственно решения, будет еще лучше. 

Спасибо.

Полный текст »

 
 
 
 

Автор begoon21 месяц назад, По-русски
А было бы реально удобно, если б в профайле можно было бы вставлять ссылки на профайлы в других системах (например, ТопКодере). А если б еще и рейтинг автоматически брался, было бы вообще нереально. ;-)

Полный текст »

 
 
 
 
  • Проголосовать: нравится  
  • +3
  • Проголосовать: не нравится  

Автор begoon21 месяц назад, По-русски
А есть ли в планах проводить матчи не только в 19:00 по Москве? Не могу, правда, сказать, что представляю большое количество людей (только двоих ;-). У нас тут время GMT+0, и московские семь часов вечера нам приходятся аккурат в четыре часа вечера, конец рабочего дня, даже не середина. Вобщем, было бы здорово, если б иногда были матчи в иное время, хотя бы по топкодеровской сетке со смещением в день-два.

Спасибо.

Полный текст »

 
 
 
 
  • Проголосовать: нравится  
  • +8
  • Проголосовать: не нравится