Advertisement
Guest User

Untitled

a guest
Nov 21st, 2014
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.98 KB | None | 0 0
  1. program POS_nr;
  2. var
  3. arr: array [0..10000000] of Int64; //массив данных
  4. t, checker: Integer; //количество выполнеинй
  5. step, a_end, pos, j, i, temp: Int64;
  6. //вспомогательные переменные, где step - сдвиг POS после выполнений операции, a_end - текущее количество элементов
  7.  
  8. procedure X();
  9. begin
  10.   inc(a_end);//увеличиваем количество элементов
  11.   step:=arr[pos];
  12.  
  13.   i:=a_end;
  14.   while i >= pos+2 do begin //свдигаем часть массива вправо
  15.     arr[i]:=arr[i-1];
  16.     dec(i);
  17.   end;
  18.   arr[pos+1]:=arr[pos]-1;  //вставляем новый элемент
  19.  
  20.   pos:=(pos + step) mod a_end; //вычисляем позицию POS
  21. end;
  22.  
  23. procedure R();
  24. begin
  25.   dec(a_end);//уменьшаем количество элементов
  26.   if a_end = 0 then exit;//если оно стало равным нулю - выходим
  27.   if pos < a_end then temp:=pos+1 //вычисляем позицию которую будем удалять
  28.   else temp:=0;
  29.   step:=arr[temp];
  30.  
  31.   i:=temp;//удаляем
  32.   while i <= a_end do begin
  33.     arr[i]:=arr[i+1];
  34.     inc(i);
  35.   end;
  36.  
  37.   if pos <> a_end then pos:=(pos + step) mod a_end //вычисляем позицию POS
  38.   else pos:=(step - 1) mod a_end;
  39. end;
  40.  
  41. Begin
  42.   a_end:=0;
  43.   read(t);
  44.   while not EOF do begin //заполняем массив
  45.     read(arr[a_end]);
  46.     inc(a_end);
  47.   end;
  48.   for checker:=1 to t do begin//выполнение операций
  49.     if a_end = 0 then break;
  50.     if arr[pos] mod 2 <> 0 then X()
  51.     else R();
  52.   end;
  53.   if a_end <> 0 then begin
  54.     j:=0;
  55.     while j<=a_end-2 do begin //вывод по условию
  56.         if pos+j<a_end then write(arr[pos+j],' ')
  57.         else write(arr[pos+j-a_end],' ');
  58.         inc(j);
  59.     end;
  60.     if pos = 0 then write(arr[pos+j])
  61.     else write(arr[pos-1]);
  62.   end
  63.   else write(-1);
  64. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement