Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.61 KB | None | 0 0
  1. program my_1;
  2.  
  3. var
  4. a: array[1..100000] of longint;
  5. b, q, l, m, n, s, mount, ans, i, j, count, d: longint;
  6.  
  7. procedure swap(var a, b: longint);
  8. var
  9. temp: longint;
  10. begin
  11. temp := a;
  12. a := b;
  13. b := temp;
  14. end;
  15.  
  16. procedure quicksort(l, r: longint);
  17. var
  18. border, i: longint;
  19. begin
  20. if l < r then begin
  21. border := l;
  22. for i := l to r - 1 do
  23. if (a[i] < a[r]) then begin
  24. swap(a[border], a[i]);
  25. inc(border);
  26. end;
  27. swap(a[border], a[r]);
  28. quicksort(l, border - 1);
  29. quicksort(border + 1, r);
  30. end;
  31. end;
  32.  
  33. function binsrch(x: longint): boolean;
  34. var
  35. l, r, i, j, k: longint;
  36. bool: boolean;
  37. begin
  38. bool := false;
  39. l := 1;
  40. r := m;
  41. while (r - l > 1) and not bool do begin
  42. k := (r + l) div 2;
  43. if a[k] = abs(x) then bool := true;
  44. if a[k] > abs(x) then r := k
  45. else l := k;
  46. end;
  47. if (a[r] = x) or (a[l] = x) then bool := true;
  48. if bool then binsrch := true
  49. else binsrch := false;
  50. end;
  51.  
  52. begin
  53. readln(b, q, l, m);
  54. for i := 1 to m do begin
  55. read(a[i]);
  56. end;
  57. count := 0;
  58. quicksort(1, m);
  59. if ((abs(q) = 1) or (b = 0)) and not binsrch(b) then writeln('inf')
  60. else if binsrch(b) and ((abs(q) = 1) or (b = 0)) then writeln(0)
  61. else begin
  62. while abs(b) < l do begin
  63. if not binsrch(b) then inc(count);
  64. b := b * q;
  65. if (d = b) and not binsrch(b) then begin
  66. writeln('inf');
  67. exit;
  68. end
  69. else if (d = b) and binsrch(b) then begin
  70. writeln(count);
  71. exit;
  72. end;
  73. d := b;
  74. end;
  75. writeln(count);
  76. end;
  77. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement