Полицейский Кверти — блюститель закона и порядка в городе Н. Но вот незадача, в городе
появились гастролеры — знаменитые воры Филле и Рулле.
Этой ночью Филле и Рулле собираются ограбить жилой дом. Дом имеет высоту этажей, и на каждом этаже окон. Также они знают планировку на этажах этажах, то есть знают, что на каждом этаже квартир и что первые окон относятся к первой квартире, следующие окон ко второй и так далее. Нумерация квартир начинается с единицы и идет снизу вверх и слева направо.
Итак, Филле и Рулле сидят на крыше дома напротив. Филле смотрит, в каких окнах горит свет,
а вкаких не горит. Для грабежа, естественно, подходят только те квартиры, ни в одном из окон
которых не горит свет.
Помогите Кверти защитить город и его жителей — найти номера квартир, пригодных для
грабежа и установить там засаду для бандитов.
Филле и Рулле планируют ограбление
Филле и Рулле планируют ограбление
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 — в окне темно. Первая из данных строк описывает самый верхний этаж, а последняя — первый этаж. Гарантируется, что данные корректны.
Формат вывода
В первой строке вывести число подходящих квартир, во второй — их номера в порядке возрастания.
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' (аденин, тимин, цитозин, гуанин). Поскольку Гале эти буквы ни о чем не говорили, она начала классифицировать фрагменты. Два фрагмента она назвала эквивалентными, если из первого можно получить второй перестановкой букв. Множества всех эквивалентных между собой фрагментов она собирала в подмножества, которые назвала
классами эквивалентности.
Когда вернулся дядюшка Юлиус, она предоставила ему результат своих трудов, а именно, найденное количество классов эквивалентности, а также состав каждого класса.
Ваша задача: проделать ровно ту же работу, что и Галя. Вперед!
ДНК-классификатор
Формат ввода
В первой строке дано число — количество имеющихся фрагментов ДНК .
В следующих строках находятся сами фрагменты — слова, состоящие из латинских заглавных букв 'А', 'Т', 'С', 'G', по одному слову в каждой строке. Суммарная длина всех фрагментов не превосходит .
Формат вывода
В первой строке вывести — количество классов эквивалентности. В следующих строках вывести через пробел фрагменты, входящих в состав класса. Классы, как и фрагменты внутри, можно выводить в любом порядке.
ДНК-классификатор
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