Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program POS_nr;
- var
- arr: array [0..10000000] of Int64; //массив данных
- t, checker: Integer; //количество выполнеинй
- step, a_end, pos, j, i, temp: Int64;
- //вспомогательные переменные, где step - сдвиг POS после выполнений операции, a_end - текущее количество элементов
- procedure X();
- begin
- inc(a_end);//увеличиваем количество элементов
- step:=arr[pos];
- i:=a_end;
- while i >= pos+2 do begin //свдигаем часть массива вправо
- arr[i]:=arr[i-1];
- dec(i);
- end;
- arr[pos+1]:=arr[pos]-1; //вставляем новый элемент
- pos:=(pos + step) mod a_end; //вычисляем позицию POS
- end;
- procedure R();
- begin
- dec(a_end);//уменьшаем количество элементов
- if a_end = 0 then exit;//если оно стало равным нулю - выходим
- if pos < a_end then temp:=pos+1 //вычисляем позицию которую будем удалять
- else temp:=0;
- step:=arr[temp];
- i:=temp;//удаляем
- while i <= a_end do begin
- arr[i]:=arr[i+1];
- inc(i);
- end;
- if pos <> a_end then pos:=(pos + step) mod a_end //вычисляем позицию POS
- else pos:=(step - 1) mod a_end;
- end;
- Begin
- a_end:=0;
- read(t);
- while not EOF do begin //заполняем массив
- read(arr[a_end]);
- inc(a_end);
- end;
- for checker:=1 to t do begin//выполнение операций
- if a_end = 0 then break;
- if arr[pos] mod 2 <> 0 then X()
- else R();
- end;
- if a_end <> 0 then begin
- j:=0;
- while j<=a_end-2 do begin //вывод по условию
- if pos+j<a_end then write(arr[pos+j],' ')
- else write(arr[pos+j-a_end],' ');
- inc(j);
- end;
- if pos = 0 then write(arr[pos+j])
- else write(arr[pos-1]);
- end
- else write(-1);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement