Надо
билеты на поезд
даниил организует поездку школьников на олимпиаду по программированию. поезд, на котором планируется добраться до места проведения олимпиады, уже выбран; осталось лишь купить билеты. на данный момент свободные места остались в n купе, притом в i-м из этих купе свободно ровно ai мест.
чтобы школьникам было нескучно, им была предоставлена возможность объединиться в пары или тройки, которые будут ехать в одном купе. всего k2 пар и k3 троек школьников изъявили желание путешествовать в одном купе. оставшиеся k1 школьников не высказали никаких предпочтений. все эти школьники различны, то есть всего на олимпиаду поедет k1 + 2×k2 + 3×k3 школьников.
определите, возможно ли купить билеты так, чтобы все пожелания были удовлетворены. даниил уже купил себе билет, то есть его брать в расчет не нужно.
формат входных данных
первая строка содержит одно целое число t (1 ≤ t ≤ 100) — количество тестов. далее следует описание t тестов. каждый из тестов описывается тремя строками.
первая строка описания теста содержит одно целое число n (1 ≤ n ≤ 105) — количество оставшихся купе.
вторая строка описания теста содержит n целых чисел a1, a2, …, an (1 ≤ ai ≤ 4) — количества свободных мест в оставшихся купе.
третья строка описания теста содержит три целых числа k1, k2 и k3 (0 ≤ ki ≤ 4×105) — количество школьников, которые не высказали никаких предпочтений, а также количество пар школьников и количество троек школьников, желающих быть в одном купе, соответственно.
гарантируется, что сумма всех n не превосходит 105.
формат результата
выведите t строк, i-я из которых содержит «yes», если в i-м тесте возможно купить билеты, удовлетворив все пожелания, и «no» в противном случае.
примеры
входные данные
2
2
3 4
1 1 1
2
3 4
1 2 1
результат работы
yes
no
входные данные
3
1
2
0 1 0
5
4 3 1 4 1
2 4 1
4
1 4 3 2
0 0 3
результат работы
yes
yes
no
примечания
в первом тесте первого примера школьника-одиночку и пару школьников можно посадить во второе купе, а тройку — в первое. во втором тесте первого примера купить билеты, удовлетворив все пожелания, не выйдет, потому что всего осталось 3 + 4 = 7 билетов, а школьников 1 × 1 + 2 × 2 + 1 × 3 = 8.
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017
// Внимание! Если программа не работает, обновите версию!
begin
var a:array[,] of integer:=(
( 2, 1,-1, 4),
(-3, 1,-4, 1),
( 2, 1, 2, 3),
( 2, 2, 5, 4),
(-3,-1,-3, 1));
Writeln('*** Исходная матрица ***');
a.Println(3); Writeln(3*a.ColCount*'-');
var s:=a.Col(2).Where(x->Abs(x)<=3);
Writeln('Элементов ',s.Count,', их сумма равна ',s.Sum)
end.
Результат
*** Исходная матрица ***
2 1 -1 4
-3 1 -4 1
2 1 2 3
2 2 5 4
-3 -1 -3 1
Элементов 3, их сумма равна -2
2. Вариант решения "Так писали наши дедушки и так нас учат в школе"
const
m=5;
n=4;
a:array[1..m,1..n] of integer=(
( 2, 1,-1, 4),
(-3, 1,-4, 1),
( 2, 1, 2, 3),
( 2, 2, 5, 4),
(-3,-1,-3, 1));
procedure SumCol(m,k:integer; var p,s:integer);
var
i:integer;
begin
s:=0; p:=0;
for i:=1 to m do
if Abs(a[i,k])<=3 then begin
s:=s+a[i,k];
p:=p+1
end
end;
var
i,j,kol,sum:integer;
begin
Writeln('*** Исходная матрица ***');
for i:=1 to m do begin
for j:=1 to n do Write(a[i,j]:3);
Writeln
end;
for i:=1 to n do Write('---');
Writeln;
SumCol(m,3,kol,sum);
Writeln('Элементов ',kol,', их сумма равна ',sum)
end.
Результат
*** Исходная матрица ***
2 1 -1 4
-3 1 -4 1
2 1 2 3
2 2 5 4
-3 -1 -3 1
Элементов 3, их сумма равна -2