fork download
  1. #include <stdio.h>
  2. #include<math.h>
  3. #include<stdlib.h>
  4. #define lli long long int
  5. #define mod 1000000007
  6. int cmp(const void *a1,const void *b1)
  7. {
  8. int g,h;
  9. g=(int)abs(*(int *)a1);
  10. h=(int)abs(*(int *)b1);
  11. if(h-g!=0)
  12. return h-g;
  13. else
  14. {
  15. if(*(int*)a1>*(int*)b1)
  16. {
  17. return -1;
  18. }
  19. else
  20. return 1;
  21. }
  22. }
  23. int main()
  24. {
  25. int n,t,i,j,k,pflag=0;
  26. lli prod1,prod2,c1;
  27. scanf("%d",&t);
  28. while(t--)
  29. {
  30. pflag=0;
  31. prod1=1;
  32. prod2=1;
  33. scanf("%d %d",&n,&k);
  34. lli a[n];
  35. for(i=0;i<n;i++)
  36. {
  37. scanf("%lld",&a[i]);
  38. if(a[i]>=0)
  39. pflag=1;
  40. }
  41. qsort(a,n,sizeof(a[0]),cmp); // sort decreasing order
  42. for(i=0;i<k;i++)
  43. {
  44. prod1= ((prod1%mod)*(a[i]%mod))%mod;
  45. }
  46. if(prod1<=0)
  47. {
  48. if(pflag==0 || k==n) // has no positive no.
  49. {
  50. prod1=1;
  51. for(i=n-k;i<n;i++)
  52. {
  53. lli c1= mod+(a[i]%mod);
  54. prod1= ((prod1%mod) * c1 )%mod;
  55. }
  56. }
  57. else if(k<n && pflag==1)
  58. { // both positive and negative
  59. // nos.trying to find max.product
  60. lli maxn=0;
  61. lli maxp=0;
  62. lli temp[k];
  63. prod1=1;
  64. prod2=1;
  65. for(i=0;i<k;i++)
  66. temp[i]=a[i];
  67. for(i=k;i<n;i++)
  68. {
  69. if(a[i]<0)
  70. {
  71. if(fabs(a[i])>fabs(maxn))
  72. maxn=a[i];
  73. }
  74. else if(a[i]>maxp)
  75. maxp=a[i];
  76. }
  77. for(i=k-1;i>=0;i--)
  78. if(a[i]>0)
  79. {
  80. temp[i]=maxn;
  81. break;
  82. }
  83. for(i=k-1;i>=0;i--)
  84. if(a[i]<0)
  85. {
  86. a[i]=maxp;
  87. break;
  88. }
  89.  
  90. for(i=0;i<k;i++)
  91. {
  92. if(a[i]%mod<0)
  93. c1=mod+(a[i]%mod);
  94. else
  95. c1= a[i]%mod;
  96. prod1= ((prod1%mod)*(c1%mod))%mod;
  97. }
  98. for(i=0;i<k;i++)
  99. {
  100. if(a[i]%mod<0)
  101. c1=mod+(temp[i]%mod);
  102. else
  103. c1= temp[i]%mod;
  104. prod2= ((prod2%mod)*(c1%mod))%mod;
  105. }
  106. //printf("p1=%lld p2=%lld ",prod1,prod2);
  107. if(prod2>prod1)
  108. prod1=prod2;
  109. }
  110. }
  111. printf("%lld\n",prod1);
  112. }
  113. return 0;
  114. }
  115.  
Success #stdin #stdout 0s 9424KB
stdin
1
5 2
-10 10 2 -1 -3
stdout
30