Выведите два числа — номера мест, билеты на которые стоит купить девочкам - Pascal ABC

Формулировка задачи:

Саша и Лиза — две самые обычные девочки, которые живут в Москве и очень любят Санкт-Петербург. На каникулы они запланировали обширную экскурсионную программу в северной столице, осталось только купить билеты. Девочки знают, что быстрее всего добраться до Санкт-Петербурга можно на скоростном поезде «Сапсан». В каждом вагоне есть N рядов, в каждом из которых по 4 места, которые нумеруются так: 1 2 4 3 5 6 8 7 9 10 12 11 13 14 16 15 17 18 20 19 21 22 24 23 . . . . . . . . Саша и Лиза выбрали вагон, в котором они планируют ехать. Оказалось, что в этом вагоне уже продано M билетов и известно, какие места уже заняты. Девочки решили купить билеты таким образом: если есть два места рядом, то они покупают их (например, 1 и 2 или 3 и 4) если двух мест рядом нет, то они пытаются купить места рядом через проход (например, 2 и 4) если нет и таких мест, то они покупают любые два свободных места. Помогите Саше и Лизе определить, какие места им стоит купить. Гарантируется, что в выбранном вагоне есть как минимум два свободных места. Входные данные В первой строке входных данных содержатся числа N — количество рядов в вагоне (1 ≤ N ≤ 105) и M — количество проданных билетов (1 ≤ M ≤ 4N - 2). В следующей строке записаны M различных чисел — номера мест, на которые билеты уже проданы. Выходные данные Выведите два числа — номера мест, билеты на которые стоит купить девочкам. Если возможны несколько вариантов ответа, выведите любой из них. Примеры входные данные 2 3 3 7 8 выходные данные 5 6 входные данные 2 5 1 4 5 2 7 выходные данные 6 8 входные данные 2 5 2 7 4 5 6 выходные данные 1 3

Код к задаче: «Выведите два числа — номера мест, билеты на которые стоит купить девочкам - Pascal ABC»

textual
var
  a:array[1..105,1..4] of boolean;
  n,c,i,j,k:integer;
  res1,res2,res3:string;
begin
  readln(n,c);
  for k:=1 to c do begin
    read(c);
    i:=c div 4+1;
    j:=c mod 4;
    if j=0 then begin j:=3;i:=i-1;end else if j=3 then j:=4;
    a[i,j]:=true;
  end;
  res1:='';res2:='';res3:='';
  for i:=1 to n do begin
     if not (a[i,1]) and not (a[i,2]) then begin res1:=inttostr((i-1)*4+1)+' '+inttostr((i-1)*4+2);break;end;
     if not (a[i,4]) and not (a[i,3]) then begin res1:=inttostr((i-1)*4+4)+' '+inttostr((i-1)*4+3);break;end; 
     if not (a[i,2]) and not (a[i,3]) then begin res2:=inttostr((i-1)*4+2)+' '+inttostr((i-1)*4+4);end;
     if length(res3)<250 then begin
       if not (a[i,1]) then res3:=res3+inttostr((i-1)*4+1)+' ';
       if not (a[i,2]) then res3:=res3+inttostr((i-1)*4+2)+' ';
       if not (a[i,3]) then res3:=res3+inttostr((i-1)*4+3)+' ';
       if not (a[i,4]) then res3:=res3+inttostr((i-1)*4+4)+' ';
     end;
  end;
  res3:=res3+' ';
  if res1<>'' then writeln(res1) else if res2<>'' then writeln(res2) else begin
    res1:=copy(res3,1,pos(' ',res3));
    delete(res3,1,pos(' ',res3));
    writeln(res1+copy(res3,1,pos(' ',res3)-1));
  end;  
end.

5   голосов, оценка 4.200 из 5


СОХРАНИТЬ ССЫЛКУ