Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program my_1;
- var
- a: array[1..100000] of longint;
- b, q, l, m, n, s, mount, ans, i, j, count, d: longint;
- procedure swap(var a, b: longint);
- var
- temp: longint;
- begin
- temp := a;
- a := b;
- b := temp;
- end;
- procedure quicksort(l, r: longint);
- var
- border, i: longint;
- begin
- if l < r then begin
- border := l;
- for i := l to r - 1 do
- if (a[i] < a[r]) then begin
- swap(a[border], a[i]);
- inc(border);
- end;
- swap(a[border], a[r]);
- quicksort(l, border - 1);
- quicksort(border + 1, r);
- end;
- end;
- function binsrch(x: longint): boolean;
- var
- l, r, i, j, k: longint;
- bool: boolean;
- begin
- bool := false;
- l := 1;
- r := m;
- while (r - l > 1) and not bool do begin
- k := (r + l) div 2;
- if a[k] = abs(x) then bool := true;
- if a[k] > abs(x) then r := k
- else l := k;
- end;
- if (a[r] = x) or (a[l] = x) then bool := true;
- if bool then binsrch := true
- else binsrch := false;
- end;
- begin
- readln(b, q, l, m);
- for i := 1 to m do begin
- read(a[i]);
- end;
- count := 0;
- quicksort(1, m);
- if ((abs(q) = 1) or (b = 0)) and not binsrch(b) then writeln('inf')
- else if binsrch(b) and ((abs(q) = 1) or (b = 0)) then writeln(0)
- else begin
- while abs(b) < l do begin
- if not binsrch(b) then inc(count);
- b := b * q;
- if (d = b) and not binsrch(b) then begin
- writeln('inf');
- exit;
- end
- else if (d = b) and binsrch(b) then begin
- writeln(count);
- exit;
- end;
- d := b;
- end;
- writeln(count);
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement