Advertisement
kornelhowil

kartkowka4v2

Dec 14th, 2020
446
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.01 KB | None | 0 0
  1. #import <stdio.h>
  2.  
  3. int ile(int a[], int n, int x)
  4. {
  5.     int licznik = 0;
  6.  
  7.     for (int r = 0; r < 2; r++) {
  8.         int k = (n - r + 1) / 2; // długość tablicy a[r], a[r+2], ...
  9.  
  10.         int beg = 0, end = k - 1;
  11.  
  12.         while (beg < end) { // znajduje pierwsze wystąpienie x w tablicy a[r], a[r+2], ... (jeśli istnieje)
  13.             int mid = (beg + end) / 2;
  14.             if (a[r + 2*mid] < x) // a[r + 2*mid] - element tablicy a[r], a[r+2], ... o numerze mid
  15.                 beg = mid + 1;
  16.             else
  17.                 end = mid;
  18.         }
  19.         int pos1 = r + 2*beg;
  20.        
  21.         beg = 0, end = k - 1;
  22.  
  23.         while (beg < end) { // znajduje ostatnie wystąpienie x w tablicy a[r], a[r+2], ... (jeśli istnieje)
  24.             int mid = (beg + end + 1) / 2;
  25.             if (a[r + 2*mid] > x)
  26.                 end = mid - 1;
  27.             else
  28.                 beg = mid;
  29.         }
  30.         int pos2 = r + 2*beg;
  31.  
  32.         if (a[pos1] == x)
  33.             licznik += (pos2 - pos1) / 2 + 1;
  34.     }
  35.     return licznik;
  36. }
  37.  
  38. int main()
  39. {
  40.     int n, x;
  41.  
  42.     scanf("%d%d", &n, &x);
  43.     int A[n];
  44.  
  45.     for (int i = 0; i < n; i++)
  46.         scanf("%d", &A[i]);
  47.  
  48.     printf("%d\n", ile(A, n, x));
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement