rendered paste body#include <stdio.h>#include <stdlib.h>#include <string.h>int porownaj(const void *wsk_1, const void *wsk_2);typedef struct kod{ long long int pesel; long long int mro;} REKRUT;REKRUT osoba[556977];struct mroczki{ long long int mro1; long long int mro2;} ELEMENTY[556977];int main(){ struct kod *wsk_pesel, key; int s=0; /*liczba testow*/ long long int p=0, z=0, q=0; /*liczba chopakoof oraz liczba zamknietych MRO i ilosc kodow do wypisania*/ long long int i=0, j=0; /*zmienne pomocnicze*/ long long int ilosc=0, ile_peseli; long long int pezel; long long int tablica[556977]={0}, wejscie, wyjscie, pom1, pom2, wynik, wynik1; /*ilosc testow*/ scanf("%d\n", &s); for(; s>0; s--) { /*wszytywanie chlopakow i sortowanie wg pesela*/ scanf("%lld\n", &p); ilosc=p; ile_peseli=p; for(i=0; p>0; p--, i++) { scanf("%lld\n", &osoba[i].pesel); scanf(" %c", &wejscie); wyjscie=(wejscie-'A'+1)*17576; scanf("%c", &wejscie); wyjscie=wyjscie+(wejscie-'A'+1)*676; scanf("%c", &wejscie); wyjscie=wyjscie+(wejscie-'A'+1)*26; scanf("%c\n", &wejscie); wyjscie=wyjscie+(wejscie-'0'+1); osoba[i].mro=wyjscie; j=i; } qsort(osoba, ilosc, sizeof(REKRUT), &porownaj); /*zamkniete MRO/ nowe MRO - kodowanie itp.*/ scanf("%lld\n", &z); for(i=0; z>0; z--, i++) { scanf("%c", &wejscie); wyjscie=(wejscie-'A'+1)*17576; scanf("%c", &wejscie); wyjscie=wyjscie+(wejscie-'A'+1)*676; scanf("%c", &wejscie); wyjscie=wyjscie+(wejscie-'A'+1)*26; scanf("%c", &wejscie); wyjscie=wyjscie+(wejscie-'0'+1); ELEMENTY[i].mro1=wyjscie; pom1=wyjscie; scanf(" %c", &wejscie); wyjscie=(wejscie-'A'+1)*17576; scanf("%c", &wejscie); wyjscie=wyjscie+(wejscie-'A'+1)*676; scanf("%c", &wejscie); wyjscie=wyjscie+(wejscie-'A'+1)*26; scanf("%c\n", &wejscie); wyjscie=wyjscie+(wejscie-'0'+1); ELEMENTY[i].mro2=wyjscie; j=i; } /*tablica[pom1]=wyjscie;*/ /*printf("%lld %lld\n", j, tablica[pom1]);*/ --i; pom1=ELEMENTY[i].mro2; tablica[pom1]=0; for(;i>0; i--) { if(tablica[ELEMENTY[i].mro2]==0) { tablica[ELEMENTY[i].mro1]=ELEMENTY[i].mro2; } else { tablica[ELEMENTY[i].mro1]=tablica[ELEMENTY[i].mro2]; } } /*ilosc peseli do wypisania*/ scanf("%lld", &q); for(; q>0; q--) { scanf("%lld", &pezel); key.pesel = pezel; wsk_pesel = bsearch(&key, osoba,ilosc , sizeof(REKRUT), porownaj); pom1=wsk_pesel->mro; if(tablica[wsk_pesel->mro]==0) { /*ROZKODOWYWANIE*/ printf("%lld", wsk_pesel->pesel); wynik=wsk_pesel->mro; wynik/=17576; wynik1=wynik+'A'-1; printf(" %c", wynik1); wynik*=17576; wynik=wsk_pesel->mro - wynik; pom1=wynik; wynik/=676; wynik1=wynik+'A'-1; printf("%c", wynik1); wynik*=676; pom1-=wynik; wynik=pom1; pom1=wynik; wynik/=26; wynik1=wynik+'A'-1; printf("%c", wynik1); wynik*=26; pom1-=wynik; wynik=pom1; wynik1=wynik+'0'-1; printf("%c\n", wynik1); } else { /*ROZKODOWYWANIE*/ printf("%lld", wsk_pesel->pesel); wynik=tablica[wsk_pesel->mro]; wynik/=17576; wynik1=wynik+'A'-1; printf(" %c", wynik1); wynik*=17576; wynik=tablica[wsk_pesel->mro] - wynik; pom1=wynik; wynik/=676; wynik1=wynik+'A'-1; printf("%c", wynik1); wynik*=676; pom1-=wynik; wynik=pom1; pom1=wynik; wynik/=26; wynik1=wynik+'A'-1; printf("%c", wynik1); wynik*=26; pom1-=wynik; wynik=pom1; wynik1=wynik+'0'-1; printf("%c\n", wynik1); } } scanf("\n"); printf("%c", '\n'); p=q=wynik=wynik1=pom1=pom2=z=i=0; memset(tablica, 0, sizeof(long long int)*456977); } printf("%c", '\n'); return 0;}int porownaj(const void *wsk_1, const void *wsk_2){ REKRUT *Wsk_1 = (REKRUT *)wsk_1; REKRUT *Wsk_2 = (REKRUT *)wsk_2; return (Wsk_1->pesel - Wsk_2->pesel);}