Информатика

15 732 задачивместе с подтемами
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.
Куб#54674
Петя склеил из N3 единичных кубиков большой куб размером N × N × N. Устав от этой сложной работы, он отправился спать, а утром, проснувшись, с ужасом обнаружил, что его младший брат Ваня K раз проткнул куб спицей.

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

Немного успокоившись после этого тяжелого потрясения, Петя заинтересовался, сколько кубиков в его творении осталось неповрежденными. Помогите ему ответить на этот сложный вопрос.

Входные данные
В первой строке вводятся числа N и K (1 <= N <= 1000, 0 <= K <= 150). Следующие K строк описывают Ванины преступные действия. Каждая строка содержит три числа - два из них представляют собой соответствующие координаты всех кубиков, проткнутых спицей, а третье, соответствующее координате, в направлении которой был проткнут куб, равно 0. Например, если N = 3, тройка (1, 0, 3) означает, что спицей были проткнуты кубики (1, 1, 3), (1, 2, 3) и (1, 3, 3). Все координаты лежат в пределах от 1 до N. Известно, что Ваня никакое действие не выполнял два раза (т.е. никакая тройка не встретится во входных данных дважды).

Выходные данные
Выведите единственное число - количество неповрежденных кубиков.
У Пети в саду растет яблоня. Воодушевленный историей об Исааке Ньютоне, который, как известно, открыл закон всемирного тяготения после того, как ему на голову упало яблоко, Петя с целью повысить свою успеваемость по физике часто сидит под яблоней.

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

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

Выясните, какие яблоки упадут с Петиной яблони.

Входные данные
В первой строке вводится число N - количество яблок на Петиной яблоне (1 <= N <= 200). Следующие N строк содержат описания яблок. Будем считать все яблоки шарами. Каждое яблоко задается координатами своей самой верхней точки (той, где оно исходно прикреплено к дереву, длиной черенка пренебрежем) xi, yi и zi и радиусом ri ( -10000 <= xi, yi, zi <= 10000, 1 <= ri <= 10000, все числа целые). Гарантируется, что изначально никакие яблоки не пересекаются (даже не соприкасаются). Ось OZ направлена вверх.

Выходные данные
В первой строке выведите количество яблок, которые упадут с яблони, если начнет падать первое яблоко. В следующей строке выводите номера упавших яблок. Яблоки нумеруются, начиная с 1, в том порядке, в котором они заданы во входных данных.
Для идентификации ресурсов в сети Internet используются URL (Uniform Resource Locator). URL состоит из нескольких элементов: протокол, хост, порт, путь, файл и секция. Некоторые элементы URL могут быть опущены. Рассмотрим упрощенный формат URL:

[протокол://]хост[:порт][путь/[файл[#секция]]]
Заключенные в квадратные скобки элементы могут быть опущены, т.е. например, можно не указать протокол или секцию. Но, например, если указан файл, то обязательно должен быть указан путь. Регистр букв в элементах URL не важен.

Рассмотрим кратко все элементы URL:

*Протокол - это способ доступа к файлу, URL с разными протоколами и одинаковыми остальными элементами могут указывать на различные ресурсы.
*Хост и порт - это имя некоторого сервера в сети и способ доступа к нему (порт - натуральное число, не превосходящее 65535).
*Путь представляет собой путь к файлу, содержащему запрашиваемый ресурс, от некоторого каталога на сервере, который называется корневым. При этом для разделения имен каталогов используется символ "/". Путь, если он не пуст, всегда начинается с символа "/". Специальное обозначение '.' соответствует самому каталогу, '..' - родительскому каталогу.
*Файл - это файл, содержащий запрашиваемый ресурс.
Наконец, файл может быть разбит на секции каким либо способом и можно указать, к какой именно секции вы хотите обратиться.

Различные символы в URL могут быть заменены своими шестнадцатеричными ASCII кодами с помощью символа %, например a = %41, Z = %5A. В коде всегда используется ровно две шестнадцатеричные цифры.

Некоторые символы могут встречаться в элементах URL только как шестнадцатеричные коды - все символы, кроме букв латинского алфавита, цифр и символов "." и "-", а некоторые не могут встречаться вообще: "\", "#", "*", "@", "%", "?", ":", ",", а также символы с ASCII-кодом меньше %20. Символ "/" может встречаться в элементах URL только в пути для разделения входящих в него каталогов. Имя файла не может состоять только из точек.

Рассмотрим примеры URL:

http://neerc.ifmo.ru/school
ftp://somewhere.net:1234/pub/files/coolgame.zip
nobody.nowhere.net/some%20dir/some%20file#some%20info


Ваша цель в этой задаче - помочь разработчикам web-сервера. Для web-сервера отсутствующие части URL имеют следующие значения по умолчанию:
Протокол http
Порт 80
Путь пустая строка
Файл index.html
Секция пустая строка


Различные как строки URL могут указывать на один и тот же ресурс, например следующие три URL:

neerc.ifmo.ru
http://neerc.ifmo.ru:80/index.html#
Http://NEERC.IFMO.Ru/Dir/../././

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

Входные данные
Входные данные состоят из двух строк, каждая из них содержит URL. Оба URL удовлетворяют формату, приведенному в условии этой задачи. Длина каждого URL не превосходит 200 символов. Гарантируется, что ни один из промежуточных каталогов на пути к ресурсу не лежит выше корневого каталога (т.е. не может встретиться, например, URL http://somewhere.com/../dir/index.html) а также, что имена всех каталогов состоят по крайней мере из одного символа (два символа "/" не могут идти подряд в любом месте, кроме как непосредственно после двоеточия после имени протокола).

Выходные данные
Выведите YES, если оба URL, приведенные во входных данных, указывают на один и тот же ресурс, и NO в противном случае.
Государство Флатландия представляет собой прямоугольник размером M × N, состоящий из единичных квадратиков. Флатландия разделена на K провинций (2 <= K <= 100). Каждая провинция представляет собой связное множество квадратиков, т.е. из каждой точки провинции можно дойти до любой другой ее точки, при этом разрешается переходить с квадратика на квадратик, только если они имеют общую сторону (общей вершины недостаточно). Во Флатландии нет точки, которая граничила бы более чем с тремя провинциями (т.е. четыре квадратика, имеющие общую вершину, не могут принадлежать четырем разным провинциям).

Каждая провинция имеет свой символ. Столица Флатландии находится в провинции, которой принадлежит символ A (заглавная латинская буква A). Провинция называется пограничной, если она содержит граничные квадратики. Провинция, в которой находится столица Флатландии, не является пограничной.

Король соседнего с Флатландией королевства Ректилания решил завоевать Флатландию. Для этого он хочет захватить столицу Флатландии. Однако он знает, что сил его армии недостаточно, чтобы сделать это сразу. Поэтому сначала он хочет окружить столичную провинцию, чтобы ослабить силы противника долгой блокадой, а потом захватить столицу.

Чтобы окружить провинцию, требуется захватить все провинции, с которыми она граничит. Две провинции граничат, если существует два квадратика, имеющие общую сторону, один из которых принадлежит первой из них, а другой - второй. Чтобы захватить провинцию, надо чтобы выполнялось одно из двух условий: либо она пограничная, либо граничит с какой-либо уже захваченной провинцией.

Чтобы сберечь силы своей армии, король Ректилании хочет установить блокаду столичной провинции, захватив как можно меньше провинций. Помогите ему выяснить, сколько провинций требуется захватить. Захватывать столичную провинцию нельзя, поскольку для этого сил армии Ректилании пока недостаточно.

Входные данные
В первой строке вводятся числа M и N (3 <= M, N <= 200). Следующие M строк содержат N символов каждая и задают карту Флатландии. Символ, находящийся в i + 1-й строке входных данных на j-м месте, представляет собой символ провинции, которой принадлежит квадратик (i, j). Все символы имеют ASCII-код больше 32 (пробела).

Выходные данные
Выведите единственное число - количество провинций, которые требуется захватить. Если установить блокаду невозможно, выведите "-1".
Фирма Macrohard получила заказ от армии одной страны на реализацию комплекса программного обеспечения для нового суперсекретного радара. Одной из наиболее важных подпрограмм в разрабатываемом комплексе является процедура сортировки.

Однако в отличие от обычной сортировки, эта процедура должна сортировать не произвольный массив чисел, который передается ей на вход, а специальный заранее заданный массив из N чисел, в котором записана некоторая фиксированная перестановка чисел от 1 до N, и кроме того, ни одно число в нем изначально не находится на своем месте (то есть на позиции с номером i изначально не находится число i).

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

Например, если массив из 6 элементов в некоторый момент имеет вид <2, 1, 3, 6, 4, 5>, то можно поменять местами 1 и 2, 6 и 4 или 4 и 5, а менять местами 1 и 3 или 3 и 6 нельзя, поскольку число 3 находится на своем месте (на позиции с номером 3).

Вам дан входной массив и поставлено важное задание. Найти последовательность обменов (не обязательно кратчайшую), сортирующую массив и удовлетворяющую приведенным условиям.

Подсказка

Найти такую последовательность обменов всегда возможно.

Входные данные
В первой строке вводится целое число N - размер входного массива (1 <= N <= 100). Вторая строка содержит N целых чисел - исходную перестановку чисел от 1 до N в массиве. Изначально ни одно число не стоит на своем месте.

Выходные данные
Выведите K строк, где K - количество обменов в Вашей сортировке. На каждой строке выведите по два числа xi и yi, разделенных пробелом - позиции в массиве, числа на которых следует поменять местами на i-ом обмене. Помните, что должно выполняться условие |xi - yi| = 1 и что нельзя перемещать число, которое уже стоит на своем месте.

Пояснение к примеру
В приведенном примере массив последовательно имеет следующий вид:
исходный вид массива
2 3 1 6 4 5
поменяли местами числа на 2 и 3 позициях
2 1 3 6 4 5
поменяли местами числа на 1 и 2 позициях
1 2 3 6 4 5
поменяли местами числа на 4 и 5 позициях
1 2 3 4 6 5
поменяли местами числа на 5 и 6 позициях
1 2 3 4 5 6
Алгоритм вычисления значения функции F(n), где n  натуральное число, задан следующими соотношениями:
F(n) = 1 при n ≤ 2;
F(n) = F(n − 1) + 3 × F(n − 2) при n > 2.
Чему равно значение функции F(7)?
В ответе запишите только натуральное число.
 
Алгоритм вычисления значения функции F(n), где n  натуральное число, задан следующими соотношениями:
F(n) = 1 при n ≤ 2;
F(n) = F(n − 1) + 2 × F(n − 2) при n > 2.
Чему равно значение функции F(7)?
В ответе запишите только натуральное число.
 
Алгоритм вычисления значения функции F(n), где n  натуральное число, задан следующими соотношениями:
F(n) = n при n ≤ 2;
F(n) = F(n − 1) + 3 × F(n − 2) при n > 2.
Чему равно значение функции F(6)?
В ответе запишите только натуральное число.
 
Алгоритм вычисления значения функции F(n), где n  натуральное число, задан следующими соотношениями:
F(n) = n при n ≤ 2;
F(n) = F(n − 1) + 2 × F(n − 2) при n > 2.
Чему равно значение функции F(6)?
В ответе запишите только натуральное число.
 
Алгоритм вычисления значения функции F(n), где n  натуральное число, задан следующими соотношениями:
F(n) = 2 при n ≤ 2;
F(n) = F(n − 1) + 3 × F(n − 2) при n > 2.
Чему равно значение функции F(5)?
В ответе запишите только натуральное число.
 
Алгоритм вычисления значения функции F(n), где n  натуральное число, задан следующими соотношениями:
F(n) = n + 1 при n ≤ 2;
F(n) = F(n − 1) + 3 × F(n − 2) при n > 2.
Чему равно значение функции F(4)?
В ответе запишите только натуральное число.
 
Алгоритм вычисления значения функции F(n), где n  натуральное число, задан следующими соотношениями:
F(n) = n + 1 при n ≤ 2;
F(n) = F(n − 1) + 2 × F(n − 2) при n > 2.
Чему равно значение функции F(4)?
В ответе запишите только натуральное число.
 
Ниже на пяти языках программирования записана рекурсивная функция (процедура) F.
Бейсик Python
SUB F(n)
  print n,
  IF n >= 7 THEN
    F(n - 3)
    F(n - 1)
  END IF
END SUB
def F(n):
    print(n, end='')
    if n >= 7:
        F(n - 3)
        F(n - 1)
 
Алгоритмический язык Паскаль
алг F(цел n)
нач
  вывод n
  если n >= 7 то
    F(n - 3)
    F(n - 1)
  все
кон
procedure F(n: integer);
begin
  write(n);
  if n >= 7 then
  begin
    F(n - 3);
    F(n - 1)
  end
end;
Си
void F(int n) {
  printf("%d", n);
  if (n >= 7) {
    F(n - 3);
    F(n - 1);
  }
}
Что выведет программа при вызове F(9)? В ответе запишите последовательность выведенных цифр слитно (без пробелов).
 
Ниже на пяти языках программирования записана рекурсивная функция (процедура) F.
Бейсик Python
SUB F(n)
  PRINT n,
  IF n >= 5 THEN
    F(n - 2)
    F(n - 1)
    F(n - 2)
  END IF
END SUB
def F(n):
    print(n, end='')
    if n >= 5:
        F(n - 2)
        F(n - 1)
        F(n - 2)
 
Алгоритмический язык Паскаль
алг F(цел n)
нач
  вывод n
  если n >= 5 то
    F(n - 2)
    F(n - 1)
    F(n - 2)
  все
кон
procedure F(n: integer);
begin
  write(n);
  if n >= 5 then
  begin
    F(n - 2);
    F(n - 1);
    F(n - 2)
  end
end;
Си
void F(int n) {
  printf("%d", n);
  if (n >= 5) {
    F(n - 2);
    F(n - 1);
    F(n - 2);
  }
}
Что выведет программа при вызове F(6)? В ответе запишите последовательность выведенных цифр слитно (без пробелов).
 
Ниже на пяти языках программирования записана рекурсивная функция (процедура) F.
Бейсик Python
SUB F(n)
  PRINT n,
  IF n >= 3 THEN
    F(n - 1)
    F(n - 3)
  END IF
END SUB
def F(n):
    print(n, end='')
    if n >= 3:
        F(n - 1)
        F(n - 3)
 
Алгоритмический язык Паскаль
алг F(цел n)
нач
  вывод n
  если n >= 3 то
    F(n - 1)
    F(n - 3)
  все
кон
procedure F(n: integer);
begin
  write(n);
  if n >= 3 then
  begin
    F(n - 1);
    F(n - 3)
  end
end;
Си
void F(int n) {
  printf("%d", n);
  if (n >= 3) {
    F(n - 1);
    F(n - 3);
  }
}
Что выведет программа при вызове F(5)? В ответе запишите последовательность выведенных цифр слитно (без пробелов).
 
Ниже на пяти языках программирования записан рекурсивный алгоритм F.
Бейсик Python
DECLARE SUB F(n)
SUB F(n)
  IF n > 2 THEN
    PRINT n
    F(n - 2)
    F(n - 4)
  END IF
END SUB
def F(n):
    if n > 2:
        print(n)
        F(n - 2)
        F(n - 4)
 
Алгоритмический язык Паскаль
алг F(цел n)
нач
  если n > 2 то
    вывод n, нс
    F(n - 2)
    F(n - 4)
  все
кон
procedure F(n: integer);
begin
  if n > 2 then begin
    writeln(n);
    F(n - 2);
    F(n - 4)
  end
end;
Си
void F(int n) {
  if (n > 2) {
    printf("%d\n", n);
    F(n - 2);
    F(n - 4);
  }
}
Чему равна сумма напечатанных на экране чисел при выполнении вызова F(9)?
 
Ваня и Петя играют в следующую игру. Ваня пишет на бумаге какую-либо перестановку чисел от 1 до N (то есть выписывает все числа от 1 до N в некотором порядке) и расставляет на столе в ряд N предметов. После этого Петя переставляет предметы в соответствии с Ваниной перестановкой. А именно, Петя выполняет следующие действия: если i-ое число в Ваниной перестановке равно ai, то Петя ставит предмет, который стоит на i-ом месте, на место с номером ai.

Обозначим предметы числами от 1 до N. Тогда начальное расположение предметов можно обозначить последовательностью чисел (1, 2, ..., N). К примеру, если N = 5, то начальное расположение предметов есть (1, 2, 3, 4, 5). Пусть Ваня написал перестановку <2, 5, 4, 3, 1>. Это значит, что после перемещения предметов они окажутся расставлены в следующем порядке: (5, 1, 4, 3, 2).

Однако, переставив предметы, Петя не останавливается на достигнутом и вновь переставляет их в соответствии с Ваниной перестановкой. Снова, если i-ое число в Ваниной перестановке равно ai, то Петя ставит предмет, который стоит на i-ом месте на место с номером ai. Так, если в приведенном выше примере повторно применить перестановку, предметы окажутся расположены в следующем порядке: (2, 5, 3, 4, 1).

Таким образом, Петя переставляет предметы в соответствии с Ваниной перестановкой, пока их расположение не окажется таким же, как исходное. В нашем примере Пете потребуется сделать еще 4 действия, порядок предметов после каждого из них будет следующим: (1, 2, 4, 3, 5), (5, 1, 3, 4, 2), (2, 5, 4, 3, 1), (1, 2, 3, 4, 5). Всего Пете потребовалось применить перестановку 6 раз.

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

Входные данные
Вводится единственное целое число N - количество предметов (1 <= N <= 100).

Выходные данные
Выведите перестановку чисел от 1 до N такую, что количество действий, которое придется сделать Пете, максимально. Если таких перестановок несколько, можно вывести любую.
Ниже на пяти языках программирования записан рекурсивный алгоритм F.
Бейсик Python
DECLARE SUB F(n)
SUB F(n)
  IF n > 2 THEN
    PRINT n
    F(n - 3)
    F(n- 1)
  END IF
END SUB
def F(n):
    if n > 2:
        print(n)
        F(n - 3)
        F(n - 1)
 
Алгоритмический язык Паскаль
алг F(цел n)
нач
  если n > 2 то
    вывод n, нс
    F(n - 3)
    F(n - 1)
  все
кон
procedure F(n: integer);
begin
  if n > 2 then begin
    writeln(n);
    F(n - 3);
    F(n  1)
  end
end;
Си
void F(int n) {
  if (n > 2) {
    printf("%d\n", n);
    F(n - 3);
    F(n 1);
  }
}
Чему равна сумма напечатанных на экране чисел при выполнении вызова F(7)?
 
Ниже на пяти языках программирования записан рекурсивный алгоритм F.
Бейсик Python
DECLARE SUB F(n)
SUB F(n)
  IF n > 2 THEN
    PRINT n
    F(n - 3)
    F(n  4)
  END IF
END SUB
def F(n):
    if n > 2:
        print(n)
        F(n - 3)
        F(n 4)
 
Алгоритмический язык Паскаль
алг F(цел n)
нач
  если n > 2 то
    вывод n, нс
    F(n - 3)
    F(n -4)
  все
кон
procedure F(n: integer);
begin
  if n > 2 then begin
    writeln(n);
    F(n - 3);
    F(n -4)
  end
end;
Си
void F(int n) {
  if (n > 2) {
    printf("%d\n", n);
    F(n - 3);
    F(n -4);
  }
}
Чему равна сумма напечатанных на экране чисел при выполнении вызова F(10)
 
Ниже на пяти языках программирования записан рекурсивный алгоритм F.
Бейсик Python
DECLARE SUB F(n)
SUB F(n)
  IF n > 1 THEN
    PRINT n
    F(n - 3)
    F(n - 5)
  END IF
END SUB
def F(n):
    if n > 1:
        print(n)
        F(n - 3)
        F(n -5)
 
Алгоритмический язык Паскаль
алг F(цел n)
нач
  если n > 1 то
    вывод n, нс
    F(n - 3)
    F(n -5)
  все
кон
procedure F(n: integer);
begin
  if n > 1 then begin
    writeln(n);
    F(n - 3);
    F(n - 5)
  end
end;
Си
void F(int n) {
  if (n > 1) {
    printf("%d\n", n);
    F(n - 3);
    F(n - 5);
  }
}
Чему равна сумма напечатанных на экране чисел при выполнении вызова F(10)?
 
Поделиться
Класснуть