Permutacje. Kolejna łamigłówka od Pana dr

0

Witam po raz kolejny proszę o naprowadzenie mnie na dobrą drogę myślenia gdyż jak na razie nic sensownego mi do głowy nie przychodzi. Za każdą wskazówkę będę niezmiernie wdzięczny.

Dany jest zbiór liczb naturalnych P = {1, 2, 3., ...., n21, n}. Rozważmy wszystkie n - elementowe permutacje utworzone z elementów zbioru P. Wszystkich możliwych permutacji jest n! Załóżmy, że permutacje zbioru P zachowują porządek
leksykograficzny, tj. kolejne permutacje tworzone są wg zasady, iż w pierwszej kolejności dokonujemy wymiany elementów na prawym końcu ciągu, posuwając się w miarę tworzenia kolejnych od prawej do lewej, czyli przykładowo dla n = 4 uporządkowany leksykograficznie ciąg permutacji wyglądać będzie następująco :
P1={1, 2, 3, 4} P2={1, 2, 4, 3} P3={1, 3, 2, 4} P4={1, 3, 4, 2} P5={1, 4, 2, 3} P6={1, 4, 3, 2} P7={2, 1, 3, 4 } .......... P24={4, 3, 2, 1}
Niech Pk oznacza k2tą permutację w porządku leksykograficznym określonym jak wyżej (czyli 1 <= k <= n!).
W tekstowym pliku wejściowym <input_file> zapisany jest w formacie swobodnym ciąg kolejnych liczb całkowitych
stanowiących pewną permutację, a więc przykładowo:
7 4 2 5 1 6 3 

Dla podanej permutacji Pk należy znaleźć (obliczyć) indeks k określający jej położenie w porządku leksykograficznym. Algorytm rozwiązania NIE MOŻE korzystać z mechanizmu opartego na obliczaniu kolejnych permutacji w porządku leksykograficznym w celu
znalezienia indeksu k.  
0

No i jaki tu problem? o_O
Załóżmy że mamy cyfry 1-9 jako elementy ciągu.
Na końcu masz 3, toteż dodajemy do numeru permutacji 3 (bo mamy 1,2 przed nią)
Kolejna od końca jest 6 toteż dodajemy do numeru permutacji 59^1 (bo dla każdej "wcześniejszej" liczby 1,2,3,4,5 mamy po 9 permutacji z elementów na końcu ciągu, tzn dla 1 mamy na ostatnim miejscu 1-9 i jest to "wcześniejsze" niż to co mamy, tak samo dla 2,3,4 i tak aż do 5)
Następnie mamy 1 więc nic nie dodajemy (bo bazowa permutacja to 1 1 1 1 1 1 1.....), realnie dodajemy tak na prawdę (1-1)92 = 09</sup>2 = 0
Następnie mamy 5 więc dodajemy oczywiście 4
9^3
później mamy 2 więc dodajemy 1*9^4

i tak dalej, efektywnie numer permutacji to: suma po kolejnych liczbach w ciągu od końca z [(c(i)-1)*9^(i-1)]

0

7 4 2 5 1 6 3
Suma:
ile za 7-ką jest mniejszych niż 7-ka razy 6! = 6*(6!)
ile za 4-ką jest mniejszych niż 4-ka razy 5! = 3*(5!)
ile za 2-ką jest mniejszych niż 2-ka razy 4! = 1*(4!)
ile za 5-ką jest mniejszych niż 5-ka razy 3! = 2*(3!)
ile za 1-ką jest mniejszych niż 1-ka razy 2! = 0*(2!)
ile za 6-ką jest mniejszych niż 6-ka razy 1! = 1*(1!)

4717

ten wynik przy indeksacji od zera, jak chcesz od jedynki to zwyczajnie dodaj jeden.
http://ideone.com/XReGTI
lub jeszcze bardziej kompaktowe rozwiązanie:
http://ideone.com/pmYTBi

1 użytkowników online, w tym zalogowanych: 0, gości: 1