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

​Этой ночью Филле и Рулле собираются ограбить жилой дом. Дом имеет высоту     этажей, и на каждом этаже    окон. Также они знают планировку на этажах этажах, то есть знают, что на каждом этаже      квартир и что первые     окон относятся к первой квартире, следующие       окон ко второй и так далее. Нумерация квартир начинается с единицы и идет снизу вверх и слева направо.

Итак, Филле и Рулле сидят на крыше дома напротив. Филле смотрит, в каких окнах горит свет,
а вкаких не горит. Для грабежа, естественно, подходят только те квартиры, ни в одном из окон
которых не горит свет.

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

Филле и Рулле планируют ограбление

N
K
M
p_1
p_2

Филле и Рулле планируют ограбление

3 4 6
3 2 1
0 0 0 1 0 1
0 0 1 0 1 0
1 0 1 0 0 1
0 1 0 1 0 0

Формат ввода

В первой строке записано три натуральных числа:


— число квартир на этаже, число этажей, количество окон на этаже соответственно.

Во второй строке записаны       натуральных чисел                — число окон для каждой квартиры слева направо.

Далее в       строках записано для каждого этажа, какие окна горят. Каждая из этих строк содержит      чисел     , где     принимает значения 0 или 1, где 1 означает, что свет в окне есть, 0 — в окне темно. Первая из данных строк описывает самый верхний этаж, а последняя — первый этаж. Гарантируется, что данные корректны.

Формат вывода

В первой строке вывести число подходящих квартир, во второй — их номера в порядке возрастания.

M,N,K (1 \le N \cdot K \le 10^6)
M
p_1, ... p_M
M
K
f_i
f_i
4
3 5 9 10

Филле и Рулле планируют ограбление

str1 = gets.chomp.split(" ").map{ |i| i.to_i }
m = str1[0]     # кол-во квартир на этаже
n = str1[1]     # кол-во этажей
k = str1[2]     # кол-во окон

result = []     # результат

windows_location = gets.chomp.split(" ").map{ |i| i.to_i }.reverse
for i in 0 ... n
  floor = gets.chomp.split(" ").map{ |i| i.to_i }
  for j in 0 ... m
    result << floor.pop(windows_location[j]).inject(:|)
  end
end

result.reverse!

puts result.count(0)
result.each_with_index{ |flat, i| print(i+1, " ") if flat == 0 }
puts

В лаборатории к дядюшке Юлиус зашла его племянница Галя. Гале очень нравилось математика, но биологией она абсолютно не интересовалась. Дядюшка Юлиус отправился за очередной кружкой кофе, а Галя, заскучав, обратила внимание на список из      фрагментов ДНК очередного гибрида динозавра с лягушкой. Все фрагменты состояли из латинских букв 'A', 'T', 'C', 'G' (аденин, тимин, цитозин, гуанин). Поскольку Гале эти буквы ни о чем не говорили, она начала классифицировать фрагменты. Два фрагмента она назвала эквивалентными, если из первого можно получить второй перестановкой букв. Множества всех эквивалентных между собой фрагментов она собирала в подмножества, которые назвала
классами эквивалентности.

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

Ваша задача: проделать ровно ту же работу, что и Галя. Вперед!

ДНК-классификатор

N

Формат ввода

В первой строке дано число        — количество имеющихся фрагментов ДНК                           .
В следующих     строках находятся сами фрагменты — слова, состоящие из латинских заглавных букв 'А', 'Т', 'С', 'G', по одному слову в каждой строке. Суммарная длина всех фрагментов не превосходит             .

 

Формат вывода

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

ДНК-классификатор

M
(l \le N \le 10^5)
q
5 \cdot 10^6
q
3
TTTA
AATT TTAA TATA
TTTAA
5
AATT
TTAA
TATA
TTTAA
TTTA

ДНК-классификатор

n = gets.to_i

fragments = []
for i in 0 ... n
  fragment = gets.to_s.strip
  fragments << [fragment, fragment.chars.sort.join]
end

result = fragments.group_by{|i| i[1]}

puts result.size
result.each do |v, k|
  k.each{|i| print i[0], " "}
  puts
end

0. Олимпиада

By vkrysanov320

0. Олимпиада

  • 215