(* * * jmeno: * permnum * * popis: pozice permutace v lex. usporadani. * level:3 * * zadani: * Uvazujme permutace nad cisly 1..N usporadane lexikograficky. * Pro danou permutaci naleznete, kolikate v poradi je v tomto * usporadani. Permutace 1234..N ma cislo 1. * * input: * Radek vstupu vypada nasledovne: *. Z: N a1 a2 ... aN * kde Z cislo zadani, N je velikost permutace permutace a a1 .. aN * je samotna permutace. Muzete prepokladat, ze N! se vejde do * datoveho typu longint. (tj. N<=12) * posledni zadani ma cislo 0. * output: *. Z: [cislo permutace] * * soubory: * permnum.pas, permnum.out, permnum.in * * au: vitas@popelka.ms.mff.cuni.cz * cp: gpl * *) var { cislo zadani } Z: Integer; { dvojtecka } dt: Char; N: Integer; M, F: Longint; i, j: Integer; a: array [1..20] of Integer; begin repeat read(Z, dt, dt, N); for i := 1 to N do begin read(a[i]); end; {* F = (N-1)! *} F := 1; for i := 1 to N - 1 do begin F := F * i; end; M := 0; for i := 1 to N - 1 do begin M := M + F * (a[i] - 1); for j := i + 1 to N do begin if a[i] < a[j] then dec(a[j]); end; F := F div (N - i); end; writeln(Z, ': ', M + 1); until Z = 0; end.