1788. Tərs
dəyişdirmə
Verilmiş
dəyişdirmə p üçün onun inversini p-1 tapın.
Giriş. İlk
sətirdə dəyişdirmənin sırası n (0 < n
≤ 20000) yazılır. İkinci sətirdə isə
özü dəyişdirmə p yazılır.
Çıxış. Axtarılan
invers dəyişdirmə p-1 bir
sətirdə çap olunmalıdır.
Nümunə
giriş |
Nümunə
çıxış |
3 2 3 1 |
3 1 2 |
kombinatorika
- dəyişdirmələr
Əvvəlcədən
təyin edilmiş dəyişdirmə kimi p
düşünək. Onun tətbiqi i pozisiyadan p[i] pozisiyaya element
keçirilməsi deməkdir, başqa bir deyil p[i] pozisiyasından i
pozisiyaya keçirilərək əməliyyatı i ® p[i] olur. p
üçün əksi dəyişdirmə pi kimi olacaq ki,
onun üçün əksi dəyişdirmə pi,
əvvəlki dəyişdirmənin əksinə olaraq p[i] ® i
keçirilməsi deməkdir. Yəni pi massivində i
üçün p[i]
pozisiyasında i olmalıdır (pi[p[i]] = i).
Nümunə
Düzənli
p = və əks p-1 = dəyişdirmələrini
təsvir edək. Əks dəyişdirmədə kenarlar
digər istiqamətdə oxlanmışdır.
Algoritmin reallaşdırılması
p massivi
giriş dəyişdirməsini saxlayır, pi massivi əksini
saxlayır.
#define MAX 20010
int p[MAX], pi[MAX];
Giriş
dəyişdirməsini oxuyuruq.
scanf("%d",&n);
for(i = 1; i <= n; i++)
scanf("%d",&p[i]);
Əks
dəyişdirməni hesablayırıq.
for(i = 1; i <= n; i++)
pi[p[i]] = i;
Əks
dəyişdirməni çap edirik.
for(i = 1; i <= n; i++)
printf("%d
",pi[i]);
printf("\n");
Siyahı p giriş
dəyişdirməsini saxlayır, siyahı pi tərsini
saxlayır. Giriş məlumatlarını oxuyuruq.
n = int(input())
p = list(map(int, input().split()))
pi = [0] * (n + 1)
Tərs dəyişdirməni
hesablayırıq.
for i in range(1, n + 1):
pi[p[i - 1]] = i
Tərs dəyişdirməni çap
edirik.
for i in range(1, n + 1):
print(pi[i], end=" ")
print()