fork download
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <vector>
  4. #include <list>
  5. #include <queue>
  6. #include <map>
  7. #include <set>
  8. #include <utility>
  9. #include <functional>
  10. #include <string>
  11. #include <algorithm>
  12. #include <cmath>
  13. #include <cstdlib>
  14. #include <ctime>
  15.  
  16. using namespace std;
  17.  
  18. typedef long long ll;
  19. typedef pair<int,int> pii;
  20. typedef map<int,int> mii;
  21. typedef vector<int> vi;
  22. typedef vector< vector<int> > vvi;
  23. typedef vector<char> vc;
  24. typedef vector<bool> vb;
  25. typedef vector<string> vs;
  26.  
  27. #define rep(i,n) for(int i=0;i<(n);i++)
  28. #define forup(i,a,b) for(int i=(a);i<=(b);i++)
  29. #define fordn(i,a,b) for(int i=(a);i>=(b);i--)
  30. #define drep(i,n) for(i=0;i<(n);i++)
  31. #define dforup(i,a,b) for(i=(a);i<=(b);i++)
  32. #define dfordn(i,a,b) for(i=(a);i>=(b);i--)
  33. #define all(x) x.begin(),x.end()
  34. #define permute(x) next_permutation(all(x))
  35. #define pb push_back
  36. #define mp make_pair
  37. #define fi first
  38. #define sc second
  39. #define gi(x) scanf("%d",&x)
  40.  
  41. int t,n,k,x;
  42. vi a;
  43.  
  44. int main() {
  45. gi(t);
  46. while(t--) {
  47. gi(n); gi(k);
  48. a=vi();
  49. bool f=false;
  50. rep(i,n) {
  51. gi(x);
  52. if(x<=k) a.pb(x);
  53. else f=true;
  54. }
  55. sort(all(a));
  56. n=a.size();
  57. if(n<2) printf("0\n");
  58. else if(a[1]==0) printf("-1\n");
  59. else if(f) printf("%d\n",n-1);
  60. else if(a[n-1]<2 or a[n-2]==0) printf("-1\n");
  61. else {
  62. int ans=0;
  63. while((ll(a[n-2])*a[n-1])<=(ll)k) {
  64. int tmp=a[n-2]*a[n-1];
  65. a[n-2]=min(a[n-1],tmp);
  66. a[n-1]=max(a[n-1],tmp);
  67. ans++;
  68. //printf("%d\n",tmp);
  69. }
  70. ans+=n-1;
  71. printf("%d\n",ans);
  72. }
  73. }
  74. return 0;
  75. }
  76.  
Success #stdin #stdout 0s 3480KB
stdin
2
5 25
4 3 2 1 5
5 25
0 0 3 4 5
stdout
5
-1