Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.47 KB | None | 0 0
  1. // Karol Szawlis grupa nr 5
  2.  
  3. import java.util.Scanner;
  4.  
  5. public class Source {
  6.     public static int first_half(int tablica[], int dlugosc, int low, int high, int dana) {
  7.         dlugosc = tablica.length;
  8.         while (high >= low) {
  9.             int mid = (low + high) >> 1;  //przesuneicie o bit  w prawo
  10.             if ((mid == 0 || dana > tablica[mid - 1]) && tablica[mid] == dana)
  11.                 return mid;
  12.             else if (dana > tablica[mid])
  13.                 low = mid + 1;
  14.             else
  15.                 high = mid-1;
  16.         }
  17.         return -1;
  18.     }
  19.  
  20.     public static int second_half(int tablica[], int dlugosc, int low, int high, int dana) {
  21.         while (high >= low) {
  22.             int mid = (low + high) >> 1;
  23.             if ((mid == dlugosc - 1 || dana < tablica[mid + 1]) && tablica[mid] == dana)
  24.                 return mid;
  25.             else if (dana < tablica[mid])
  26.                 high = (mid - 1);
  27.             else
  28.                 low = mid + 1;
  29.         }
  30.         return -1;
  31.     }
  32.  
  33.     public static int mount(int tablica[], int dlugosc, int dana) {
  34.         int j;
  35.         int i;
  36.         i = first_half(tablica, dlugosc, 0, dlugosc - 1, dana);
  37.         if (i == -1)
  38.             return i + 1;
  39.         j = second_half(tablica, dlugosc, i, dlugosc - 1, dana);
  40.  
  41.         return j - i + 1;
  42.     }
  43.  
  44.     public static int wyszukiwanie_interpolacyjne(int tablica[], int search_key, int dlugosc) {
  45.         if (tablica[0] == tablica[tablica.length - 1] && tablica[0] == search_key) {
  46.             return 0;
  47.         }
  48.  
  49.         int low = 0;
  50.         int high = tablica.length - 1;
  51.         int middle;
  52.         while (tablica[low] <= search_key && tablica[high] >= search_key) {
  53.  
  54.             middle = low + (int) (((double) ((search_key - tablica[low]) * (high - low))) / (tablica[high] - tablica[low]));
  55.             if (tablica[middle] < search_key) {
  56.                 low = middle + 1;
  57.             } else if (tablica[middle] > search_key) {
  58.                 high = middle - 1;
  59.             } else {
  60.                 return middle;
  61.             }
  62.         }
  63.  
  64.         if (tablica[low] == search_key) {
  65.             return low;
  66.         } else {
  67.             return -1;
  68.         }
  69.     }
  70.  
  71.  
  72.  
  73.     public static void usuwanie_duplikatow(int tablica[]) {
  74.         int counter = 0;
  75.  
  76.         int ptr = 0;
  77.  
  78.         for(int i = 0; i < tablica.length-1; i++)
  79.             if(tablica[i] != tablica[i+1] )
  80.                 tablica[ptr++] = tablica[i];
  81.  
  82.         for (int i = 0; i < ptr; i++) {
  83.             counter++;
  84.  
  85.             if (counter % 50 == 0) {
  86.                 System.out.println(tablica[i]);
  87.             } else {
  88.                 System.out.print(tablica[i] + " ");
  89.             }
  90.  
  91.             if (counter == 200) {
  92.                 break;
  93.             }
  94.         }
  95.  
  96.  
  97.         if(counter<200)
  98.         {
  99.             System.out.println(tablica[tablica.length-1]);
  100.         }
  101.  
  102.     }
  103.  
  104.     public static Scanner in = new Scanner(System.in);
  105.  
  106.     public static void main(String args[]) {
  107.  
  108.         int liczba_zestawow = in.nextInt();
  109.         while (liczba_zestawow > 0) {
  110.             int liczba_elementow_do_tablicy = in.nextInt();
  111.             int tablica[] = new int[liczba_elementow_do_tablicy];
  112.             for (int i = 0; i < liczba_elementow_do_tablicy; i++) {
  113.                 int p = in.nextInt();
  114.                 tablica[i] = p;
  115.  
  116.             }
  117.             int ilosc_zapytan = in.nextInt();
  118.             while (ilosc_zapytan > 0) {
  119.                 int dana = in.nextInt();
  120.                 int p = (mount(tablica, tablica.length, dana));
  121.                 System.out.print("(" + p + " " + wyszukiwanie_interpolacyjne(tablica, dana, tablica.length) + ")");
  122.                 // tu tez
  123.                 ilosc_zapytan--;
  124.             }
  125.             System.out.println("");
  126.             usuwanie_duplikatow(tablica);
  127.             liczba_zestawow--;
  128.         }
  129.  
  130.     }
  131. }
  132. // tu robie to odzielnie poniewaz zadanie jes podzielone na trzy i lepiej tak sprawdzac, zbiorczy
  133. // robie na koncu 111
  134. // usuwanie duplikatow
  135. // 1 1 1 1 1 - dziala
  136. // 0 1 2 3 4 5 6 7 8 - dziala
  137. // 0 0 2 2 90 90 100 100 120 120 - dziala
  138. // tu robie testy dla ilosci elementow szukanego elementu i automatycznie robie dla tablicy ale skupiam sie glownie
  139. // na wyszukiwania
  140. /*
  141. 5
  142. 5
  143. 1 2 3 4 5
  144. 2
  145. 1
  146. (1
  147. 0
  148. (0
  149. 1 2 3 4 5
  150. 4
  151. 0 0 0 0
  152. 2
  153. 0
  154. (4
  155. 10
  156. (0
  157. 0
  158. 6
  159. 12 12 12 13 13 13
  160. 1
  161. 12
  162. (3
  163. 12 13
  164. 4
  165. -1 -1 1 1
  166. 2
  167. -1
  168. (2
  169. 2
  170. (0
  171. -1 1
  172. 5
  173. 5 6  7  8 9
  174. 5
  175. 5
  176. (1
  177. 6
  178. (1
  179. 7
  180. (1
  181. 8
  182. (1
  183. 9
  184. (1
  185. 5 6 7 8 9
  186.  
  187.  */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement