Advertisement
Guest User

Untitled

a guest
Apr 1st, 2017
1,555
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.94 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define fr(i,a,b) for(i=a;i<=b;i++)
  5. #define frn(i,a,b) for(i=a;i>=b;i--)
  6. int f,k,r,l,i,j,x,cnt,n,befR,befa1;
  7. int ar[100007],flag=0,zero=0;
  8. int power(int b,int p)
  9. {
  10. int ii,mult=1;
  11. fr(ii,1,p)
  12. mult*=b;
  13.  
  14. return mult;
  15. }
  16. int main()
  17. {
  18. cin>>f>>r>>l>>k;
  19. fr(i,0,k-1)
  20. {
  21. scanf("%d",ar+i);
  22. if(ar[i]==f)
  23. flag=1;
  24. if(ar[i]==0)
  25. zero=1;
  26. }
  27.  
  28.  
  29. if(f==0 || (r==1&&flag==0) )
  30. return 0*puts("inf");
  31.  
  32. if(r==0)
  33. {
  34. if(f>l)
  35. puts("0");
  36. else if(zero!=1)
  37. puts("inf");
  38. else if(flag==1)
  39. puts("0");
  40. else
  41. puts("1");
  42.  
  43. return 0;
  44. }
  45.  
  46. if(r==1)
  47. {
  48. if(f>l || flag==1)
  49. puts("0");
  50. else
  51. puts("inf");
  52.  
  53. return 0;
  54. }
  55.  
  56. int a1;
  57.  
  58. if(f<0)
  59. a1=-f;
  60. else
  61. a1=f;
  62.  
  63. if(r<0)
  64. {
  65. r=-r;
  66. if(r==1)
  67. {
  68. if(f>l || flag==1)
  69. puts("0");
  70. else
  71. puts("inf");
  72.  
  73. return 0;
  74. }
  75. befR=r;
  76. befa1=a1;
  77. cnt=log10((double)l/a1)/log10(befR)+1;
  78.  
  79. r*=r;
  80. int lastTH=cnt;
  81.  
  82. fr(i,0,k-1)
  83. {
  84. if(ar[i]<0)
  85. {
  86. ar[i]=-ar[i];
  87. a1=(f<0)?befa1:befa1*befR;
  88.  
  89. int fakeN=log10((double)ar[i]/a1)/log10(r)+1.0;
  90.  
  91. int pod=a1*power(r,fakeN-1);
  92.  
  93. int realN=(f<0)?fakeN+(fakeN-1) : fakeN+fakeN;
  94.  
  95. if(pod==ar[i] && realN<=lastTH)
  96. cnt--;
  97. }
  98. else if(ar[i]>0)
  99. {
  100. a1=(f>0)?befa1:befa1*befR;
  101.  
  102. int fakeN=log10((double)ar[i]/a1)/log10(r)+1.0;
  103.  
  104. int pod=a1*power(r,fakeN-1);
  105.  
  106. int realN=(f>0)?fakeN+(fakeN-1) : fakeN+fakeN;
  107.  
  108. if(pod==ar[i] && realN<=lastTH)
  109. cnt--;
  110. }
  111.  
  112. }
  113.  
  114.  
  115.  
  116. }
  117. else
  118. {
  119. cnt=log10((double)l/a1)/log10(r)+1.0;
  120. int lastTH=cnt;
  121.  
  122. fr(i,0,k-1)
  123. {
  124. double nth;
  125. if(f<0 && ar[i]<0)
  126. {
  127. ar[i]=-ar[i];
  128. nth=log10((double)ar[i]/a1)/log10(r)+1.0;
  129. n=nth;
  130. int pod=a1*power(r,n-1);
  131.  
  132. if(pod==ar[i] && n<=lastTH)
  133. cnt--;
  134. }
  135. else if(f>0 && ar[i]>0)
  136. {
  137. nth=log10((double)ar[i]/a1)/log10(r)+1.0;
  138. n=nth;
  139.  
  140. int pod=a1*power(r,n-1);
  141. if(pod==ar[i] && n<=lastTH)
  142. cnt--;
  143. }
  144.  
  145. }
  146.  
  147. }
  148.  
  149. cout<<cnt<<'\n';
  150.  
  151. return 0;
  152. }
  153. /*
  154. 2 -2 35 5
  155. 2 -4 8 -16 32
  156.  
  157. -3 -2 49 5
  158. -3 6 -12 24 -48
  159.  
  160. 2 -2 35 5
  161. 2 -4 8 -10 32
  162.  
  163. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement