L_. Гаджеты за доллары и фунты ограничение по времени на тест2 секунды
ограничение по памяти на тест256 мегабайт
вводстандартный ввод
выводстандартный вывод
Нура хочет купить k гаджетов. У неё есть s бурлей. В магазине каждый из m гаджетов продается либо за доллары, либо за фунты. Таким образом, каждый гаджет характеризуется типом валюты (и стоимостью в этой валюте), за которую он продается. Тип валюты и цена гаджета в этой валюте не меняются со временем.
Покупки Нура может совершать в течение n дней. Для каждого дня известен курс доллара и курс фунта, то есть известна стоимость конвертации бурлей в доллары и фунты.
Каждый день (от 1 до n) Нура может купить любые из гаджетов по текущему курсу. За день можно покупать произвольное количество гаджетов. Каждый гаджет можно купить не более одного раза за все n дней.
Нуре определить номер наименьшего дня, к концу которого у неё будет k гаджетов. Нура всегда расплачивается бурлями, которые конвертируются по курсу дня покупки. Нура не может купить доллары или фунты, она всегда хранит у себя только бурли. Гаджеты пронумерованы целыми числами от 1 до m в порядке их появления во входных данных.
Входные данные
В первой строке находятся четыре целых числа n, m, k, s (1 ≤ n ≤ 2·105, 1 ≤ k ≤ m ≤ 2·105, 1 ≤ s ≤ 109) — количество дней, общее количество гаджетов, количество гаджетов, которые хочет купить Нура и количество бурлей в распоряжении Нуры.
Во второй строке находятся n целых чисел ai (1 ≤ ai ≤ 106) — стоимость одного доллара в бурлях в i-й день.
В третьей строке находятся n целых чисел bi (1 ≤ bi ≤ 106) — стоимость одного фунта в бурлях в i-й день.
Далее в m строках находятся по два целых числа ti, ci (1 ≤ ti ≤ 2, 1 ≤ ci ≤ 106) — тип гаджета и его стоимость. Если тип гаджета равен 1, то он продается только за доллары и его стоимость указана в долларах. Если тип гаджета равен 2, то он продается только за фунты и его стоимость указана в фунтах.
Выходные данные
Если Нура не сможет купить k гаджетов, в единственной строке выведите число -1.
Если же покупка k гаджетов возможна, в первой строке выведите число d — номер наименьшего дня, к концу которого у Нуры будет k гаджетов. В следующих k строках выведите по два целых числа qi, di — номер гаджета и день в который гаджет был куплен. Все qi должны быть различны, di могут совпадать (то есть в один день Нура может купить несколько гаджетов). Дни пронумерованы от 1 до n. Пары qi, di можно выводить в любом порядке.
Если возможных купить гаджеты за минимальное количество дней d несколько, то выведите любой из них.
Примеры
входные данные
5 4 2 2
1 2 3 2 1
3 2 1 2 3
1 1
2 1
1 2
2 2
выходные данные
3
1 1
2 3
входные данные
4 3 2 200
69 70 71 72
104 105 106 107
1 1
2 2
1 2
выходные данные
-1
входные данныеСкопировать
4 3 1 1000000000
900000 910000 940000 990000
990000 999000 999900 999990
1 87654
2 76543
1 65432
выходные данные
-1
Купе Места
1 1-4,53,54
2 5-8,51,52
3 9-12,49,50
4 13-16,47,48
5 17-20,45,46
6 21-24,43,44
7 25-28,41,42
8 29-32,39,40
9 33-36,37,38
Установим связь номера места с номером купе. Предлагается следующий (конечно же, не единственный) вариант:
Здесь знаком ÷ обозначена операция целочисленного деления.
Теперь можно написать программу. Язык программирования в задании не указан, поэтому выбран язык свободно распространяемой для целей обучения системы программирования PascalABC.Net
var
n:integer;
begin
Write('Укажите номер места: '); Read(n);
Write('Место располагается в купе №');
if n<=36 then Write((n-1) div 4 + 1)
else Write((54-n) div 2 + 1)
end.
Тестовое решение:
Укажите номер места: 18
Место располагается в купе №5
Первый, прямой. Просто перебрать возможные варианты (не забывая про инверсию). Нужные суммы: 7, 14, 21, 28, 35
7 выходит при:
1+6,2+5,3+4.
14 выходит при:
1+13,2+12,3+11,4+10,5+9,6+8,7+7
21 выходит при:
1+20,2+19,3+18,4+17,5+16,6+15,7+14,8+13,9+12,10+11
28 выходит при:
8+20,9+19,10+18,11+17,12+16,13+15,14+14
35 выходит при:
15+20,16+19,17+18
При инверсиях кол-во вариантов:
В первом случае 3*2=6, во втором: 2*6+1=13. Всего: 13+6=19.
В третьем случае 10*2=20
В четвертом случае 2*6+1=13, в пятом: 3*2=6. Всего так же как и в первых двух 19.
Складываем.
19+20+19=58.
Второй, гибкий.
Сумма двух чисел делится на число n, если сумма остатков от деления на n этих чисел равна самому n либо 0 (из теории чисел).
Известно, что у 20-гранника 20 возможных "чисел". 7 мы получаем из 1+6,2+5,3+4 и инверсий этих групп.
Сколько чисел присутствует в 20, при сложении остатков которых мы получим 7? Вот 7+0. Остаток 7 невозможен, поэтому берем просто 0+0. Это у нас 7 и 14 для обоих случаев, т.е. 2*2=4.
Для начала 6+1. Для первого: 6, 13, 20. Для второго: 1, 8, 15. 3*3=9.
Затем 5+2. Для первого 5, 12, 19. Для второго: 2, 9, 16, 3*3=9
Далее 4+3. Для первого: 4, 11, 18. Для второго: 3, 10, 17. 3*3=9
3+4. Первое: те самые 3, 10, 17. Второе, понятно, 4, 11, 18. 3*3=9
2+5: 1) 2, 9, 16, 2) 5, 12, 19. 3*3=9
1+6: 1) 1, 8, 15, 2) 6, 13, 20 3*3=9
0+7 (было уже как 0+0). (вообще, из этого можно было установить закономерность и не высчитывать все).
9*6+4=58.
ответ: 58.