Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Karol Szawlis grupa nr 5
- import java.util.Scanner;
- public class Source {
- public static int first_half(int tablica[], int dlugosc, int low, int high, int dana) {
- dlugosc = tablica.length;
- while (high >= low) {
- int mid = (low + high) >> 1; //przesuneicie o bit w prawo
- if ((mid == 0 || dana > tablica[mid - 1]) && tablica[mid] == dana)
- return mid;
- else if (dana > tablica[mid])
- low = mid + 1;
- else
- high = mid-1;
- }
- return -1;
- }
- public static int second_half(int tablica[], int dlugosc, int low, int high, int dana) {
- while (high >= low) {
- int mid = (low + high) >> 1;
- if ((mid == dlugosc - 1 || dana < tablica[mid + 1]) && tablica[mid] == dana)
- return mid;
- else if (dana < tablica[mid])
- high = (mid - 1);
- else
- low = mid + 1;
- }
- return -1;
- }
- public static int mount(int tablica[], int dlugosc, int dana) {
- int j;
- int i;
- i = first_half(tablica, dlugosc, 0, dlugosc - 1, dana);
- if (i == -1)
- return i + 1;
- j = second_half(tablica, dlugosc, i, dlugosc - 1, dana);
- return j - i + 1;
- }
- public static int wyszukiwanie_interpolacyjne(int tablica[], int search_key, int dlugosc) {
- if (tablica[0] == tablica[tablica.length - 1] && tablica[0] == search_key) {
- return 0;
- }
- int low = 0;
- int high = tablica.length - 1;
- int middle;
- while (tablica[low] <= search_key && tablica[high] >= search_key) {
- middle = low + (int) (((double) ((search_key - tablica[low]) * (high - low))) / (tablica[high] - tablica[low]));
- if (tablica[middle] < search_key) {
- low = middle + 1;
- } else if (tablica[middle] > search_key) {
- high = middle - 1;
- } else {
- return middle;
- }
- }
- if (tablica[low] == search_key) {
- return low;
- } else {
- return -1;
- }
- }
- public static void usuwanie_duplikatow(int tablica[]) {
- int counter = 0;
- int ptr = 0;
- for(int i = 0; i < tablica.length-1; i++)
- if(tablica[i] != tablica[i+1] )
- tablica[ptr++] = tablica[i];
- for (int i = 0; i < ptr; i++) {
- counter++;
- if (counter % 50 == 0) {
- System.out.println(tablica[i]);
- } else {
- System.out.print(tablica[i] + " ");
- }
- if (counter == 200) {
- break;
- }
- }
- if(counter<200)
- {
- System.out.println(tablica[tablica.length-1]);
- }
- }
- public static Scanner in = new Scanner(System.in);
- public static void main(String args[]) {
- int liczba_zestawow = in.nextInt();
- while (liczba_zestawow > 0) {
- int liczba_elementow_do_tablicy = in.nextInt();
- int tablica[] = new int[liczba_elementow_do_tablicy];
- for (int i = 0; i < liczba_elementow_do_tablicy; i++) {
- int p = in.nextInt();
- tablica[i] = p;
- }
- int ilosc_zapytan = in.nextInt();
- while (ilosc_zapytan > 0) {
- int dana = in.nextInt();
- int p = (mount(tablica, tablica.length, dana));
- System.out.print("(" + p + " " + wyszukiwanie_interpolacyjne(tablica, dana, tablica.length) + ")");
- // tu tez
- ilosc_zapytan--;
- }
- System.out.println("");
- usuwanie_duplikatow(tablica);
- liczba_zestawow--;
- }
- }
- }
- // tu robie to odzielnie poniewaz zadanie jes podzielone na trzy i lepiej tak sprawdzac, zbiorczy
- // robie na koncu 111
- // usuwanie duplikatow
- // 1 1 1 1 1 - dziala
- // 0 1 2 3 4 5 6 7 8 - dziala
- // 0 0 2 2 90 90 100 100 120 120 - dziala
- // tu robie testy dla ilosci elementow szukanego elementu i automatycznie robie dla tablicy ale skupiam sie glownie
- // na wyszukiwania
- /*
- 5
- 5
- 1 2 3 4 5
- 2
- 1
- (1
- 0
- (0
- 1 2 3 4 5
- 4
- 0 0 0 0
- 2
- 0
- (4
- 10
- (0
- 0
- 6
- 12 12 12 13 13 13
- 1
- 12
- (3
- 12 13
- 4
- -1 -1 1 1
- 2
- -1
- (2
- 2
- (0
- -1 1
- 5
- 5 6 7 8 9
- 5
- 5
- (1
- 6
- (1
- 7
- (1
- 8
- (1
- 9
- (1
- 5 6 7 8 9
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement