Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- uses sysutils, testlib;
- {$APPTYPE CONSOLE}
- {$O-,Q+,R+}
- const
- maxn = 100;
- type
- TArr = array[1..maxn] of integer;
- procedure readPermutation(var arr:TArr; n:longint; name:string);
- var
- i:longint;
- was:array[1..maxn] of boolean;
- begin
- assert(n <= maxn);
- for i := 1 to n do
- was[i] := false;
- for i := 1 to n do begin
- arr[i] := inf.readintegerrange(1, n);
- if was[arr[i]] then
- quit(_fail, format('%s: number %d occurs twice', [ name, arr[i] ]));
- was[arr[i]] := true;
- end;
- for i := 1 to n do
- assert(was[i]);
- end;
- var
- n:longint;
- src, dest:TArr;
- const
- maxops = 100000;
- function readAnswer(var f:InStream; wa, pe:TResult):Longint;
- var
- cur:TArr;
- procedure move(st, len:longint);
- var
- ne, tmp:longint;
- begin
- while len > 0 do begin
- ne := (st mod n) + 1;
- tmp := cur[st]; cur[st] := cur[ne]; cur[ne] := tmp;
- st := ne;
- dec(len);
- end;
- end;
- var
- i, tmp:longint;
- ops:longint;
- cop:longint;
- begin
- for i := 1 to n do cur[i] := src[i];
- result := -1;
- ops := 0;
- f.skip([' ', #10, #13, #9]);
- while not f.eof do begin
- cop := f.readintegerrange(1, n); f.skip([' ', #10, #13, #9]);
- inc(ops);
- if ops > maxops then quit(pe, format('Maximum numbers of operations exceeded (%d)', [ maxops ]));
- for i := 1 to n do if cur[i] = cop then
- move(i, cop);
- end;
- while cur[1] <> 1 do begin
- tmp := cur[1];
- for i := 1 to n - 1 do
- cur[i] := cur[i + 1];
- cur[n] := tmp;
- end;
- for i := 1 to n do
- if cur[i] <> dest[i] then quit(wa, 'Not a resulting sequence got in the end');
- result := ops;
- end;
- var
- i:longint;
- g:boolean;
- ja, pa:longint;
- begin
- n := inf.readintegerrange(3, 100);
- readPermutation(src, n, 'Source permutation');
- readPermutation(dest, n, 'Resulting permutation');
- g := false;
- for i := 1 to n do g := g or (src[i] <> dest[i]);
- if not g then
- quit(_fail, 'Starting and resulting permutaitons are equal');
- ja := readAnswer(ans, _fail, _fail);
- pa := readAnswer(ouf, _wa, _pe);
- quit(_ok, format('Ok, participant used %d steps (jury used %d)', [ pa, ja ]));
- end.
Add Comment
Please, Sign In to add comment