Advertisement
Alx09

Ex9 Sebi

May 8th, 2020
1,610
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.61 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. unsigned ZigZag(unsigned n, unsigned i, unsigned j, unsigned pivot, unsigned lung) {
  5.     if (lung) { // daca lungimea matricei este ce-l putin 1x1
  6.         n = n - ((2 * (i > lung) + (j > lung) ) * pivot); // ne punem mereu pe primul element din cadran
  7.         // n se pastreaza ca primul element din cadran si pivot ca si numar de lemente din cadran
  8.         if (i > lung ) i -= lung; // i isi va schimba pozitia in funtie al catelea este in cadran
  9.         if (j > lung ) j -= lung; // j la fel ca i
  10.  
  11.         return ZigZag(n, i, j, pivot/ 4, lung /2); // apelam recursiv functia pentru pivot/4 si lung/2 asta pentru a
  12.     }                                             // ne pune pe un cadran mai mic pana ajungem sa nu mai avem nici unu
  13.     return n; // afisam n obtinut
  14. }
  15.  
  16. int main() {
  17.     unsigned n, i, j , q, pivot, lung; // variabile auxiliare
  18.     FILE *f, *g; // 2 variabile de tip fiser
  19.     f = fopen("in.txt", "r"); // deschidem in mod citire
  20.     g = fopen("out.txt", "w"); // deschidem in mod scriere
  21.     fscanf(f, "%u%u", &n, &q); // citim n respectiv numarul de perechi de i si j
  22.     pivot = 1 << 2 * (n - 1); // salvam pivotul care este mereu numarul de elemtne din matirce /4 ca sa facem cele 4 cadrane
  23.     lung = 1 << (n - 1); // lungimea matricei ne este necesara mereu / 2
  24.     n = 1 << 2 * n; // salvam valoarea maxima
  25.     while (q) {
  26.         fscanf(f, "%u%u", &i, &j); // citim perehea i si j
  27.         fprintf(g, "%u\n", ZigZag(n , i, j , pivot, lung)); // apelam functia necesara complexitate O(n *q)
  28.         q--; // scadem numarul de perechi care trebuie citite
  29.     }
  30.     fclose(f); //inchidem fiserul
  31.     fclose(g); //inchidem fiserul
  32.     return 0;
  33. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement