fork download
  1. #include<bits/stdc++.h>
  2. #include<stdio.h>
  3. using namespace std;
  4. #define ll long long int
  5. void MergeSort(ll *p,ll *q,ll low,ll high,ll min);
  6. void Merge(ll *p,ll *q,ll low,ll mid,ll high,ll min);
  7. ll ciel(long double n);
  8. int main(){
  9. ll n,in[1000000],rt[1000000],req,min,re=9223372036854775807,count=0,sum1=0,sum=0,count1,diff,sum3=0,flag=0,i;
  10. long double x=1.0000000000000000000;
  11. scanf("%lld%lld%lld",&n,&req,&min);
  12. for(i=0;i<n;i++){
  13. scanf("%lld%lld",&in[i],&rt[i]);
  14. }
  15. MergeSort(in,rt,0,n-1,min);
  16. for(i=n-1;i>=0;i--){
  17. count1=ciel((long double)(min-in[i])/(rt[i]*x));
  18. // printf("%lld re\n",re);
  19. diff=count1-count;
  20. if(count1>=re){
  21. printf("%lld\n",re);
  22. flag=1;
  23. break;
  24. }
  25. sum=(count1*rt[i]+in[i])+sum1*diff+sum;
  26. sum1=sum1+rt[i];
  27. sum3=sum3+in[i];
  28. if(sum>=req){
  29. printf("%lld\n",count1);
  30. flag=1;
  31. break;
  32. }
  33. else{
  34. re=ciel((long double)(req-sum3)/(sum1*x));
  35. count=count1;
  36. }
  37.  
  38.  
  39. }
  40. if(!flag)
  41. printf("%lld\n",re);
  42.  
  43. return 0;
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50. }
  51. ll ciel(long double n){
  52. ll n1;
  53. long double x=0.00000000000000000000;
  54. n1=n;
  55. n=n-n1;
  56. if(n==x)
  57. return n1;
  58. else return (n1+1);
  59.  
  60.  
  61.  
  62. }
  63.  
  64.  
  65. void MergeSort(ll *p,ll *q,ll low,ll high,ll min){
  66. ll mid;
  67. if(low<high){
  68. mid=(low+high)/2;
  69. MergeSort(p,q,low,mid,min);
  70. MergeSort(p,q,mid+1,high, min);
  71. Merge(p,q,low,mid,high,min);
  72. }
  73.  
  74.  
  75. }
  76. void Merge(ll *p,ll *q,ll low,ll mid,ll high,ll min){
  77. ll k,i,j,b[1000000],c[1000000];
  78. long double x,y,z=1.000000000000000;
  79. i=low,j=mid+1,k=0;
  80. while(i<=mid&&j<=high){
  81. x=(*(p+i)-min)/( *(q+i)*z);
  82. y=(*(p+j)-min)/( *(q+j)*z);
  83. if(x<y){
  84. b[k]=*(p+i);
  85. c[k]=*(q+i);
  86. i++,k++; }
  87. else{
  88. b[k]=*(p+j);
  89. c[k]=*(q+j);
  90. j++,k++;
  91. }
  92. }
  93. while(i<=mid){
  94. b[k]=*(p+i);
  95. c[k]=*(q+i);
  96. i++,k++;
  97. }
  98. while(j<=high){
  99. b[k]=*(p+j);
  100. c[k]=*(q+j);
  101. j++,k++;
  102. }
  103. for(i=low,j=0;i<=high;i++,j++){
  104. *(p+i)=b[j];
  105. *(q+i)=c[j];
  106.  
  107. }
  108.  
  109. }
  110.  
  111.  
Success #stdin #stdout 0s 47192KB
stdin
3 74 51
2 2
5 7
2 9
stdout
7