aka007

Minimum Average Waiting Time Algorithm

Aug 14th, 2014
398
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.71 KB | None | 0 0
  1. /*******************
  2. Akash Agrawall
  3. IIIT HYDERABAD
  4. ***********************/
  5.  
  6.  
  7. #include<cstdio>
  8. #include<iostream>
  9. #include<cstdlib>
  10. #include<cmath>
  11. #include<cstring>
  12. #include<climits>
  13. #include<algorithm>
  14. #include<vector>
  15. #include<set>
  16. #include<map>
  17. #include<bitset>
  18. #include<stack>
  19. #include<queue>
  20. #include<stdio.h>
  21. #include<string.h>
  22. #include<math.h>
  23. #include<functional>
  24. #include<numeric>
  25. using namespace std;
  26. #define ll long long int
  27. #define FOR(i,a,b) for(i= (int )a ; i < (int )b ; ++i)
  28. #define rep(i,n) FOR(i,0,n)
  29. #define INF INT_MAX
  30. #define ALL(x) x.begin(),x.end()
  31. #define LET(x,a) __typeof(a) x(a)
  32. #define IFOR(i,a,b) for(LET(i,a);i!=(b);++i)
  33. #define EACH(it,v) IFOR(it,v.begin(),v.end())
  34. #define pb push_back
  35. #define sz(x) int(x.size())
  36. #define mp make_pair
  37. #define fill(x,v) memset(x,v,sizeof(x))
  38. #define max(a,b) ((a)>(b)?(a):(b))
  39. #define min(a,b) ((a)<(b)?(a):(b))
  40. #define pi(n) printf("%d ",n)
  41. #define pd(n) printf("%lf ",n)
  42. #define pdl(n) printf("%lf\n",n)
  43. #define pin(n) printf("%d\n",n)
  44. #define pl(n) printf("%lld",n)
  45. #define pln(n) printf("%lld\n",n)
  46. #define si(n) scanf("%d",&n)
  47. #define sl(n) scanf("%lld",&n)
  48. #define sd(n) scanf("%lf",&n)
  49. #define ss(n) scanf("%s",n)
  50. #define scan(v,n) vector<int> v;rep(i,n){ int j;si(j);v.pb(j);}
  51. #define mod (int)(1e9 + 7)
  52.  
  53. long long int gcd(long long int a,long long int b)
  54. {
  55. long long int c;
  56. while(a!=0)
  57. {
  58. c = a;
  59. a = b%a;
  60. b = c;
  61. }
  62. return b;
  63. }
  64.  
  65. void seive()
  66. {
  67. int i,j;
  68. int MAX=1000006;
  69. int isprime[1000006];
  70. isprime[0] = isprime[1] = 1;
  71. for (i = 4; i < MAX; i += 2)
  72. isprime[i] = 1;
  73. for (i = 3; i * i < MAX; i += 2)
  74. {
  75. if (!isprime[i])
  76. {
  77. for (j = i * i; j < MAX; j += 2 * i)
  78. {
  79. isprime[j] = 1;
  80. }
  81. }
  82. }
  83. }
  84. ll powerit(ll a, ll b)
  85. {
  86. ll x=1;
  87. while(b!=0)
  88. {
  89. if(b&01==1)
  90. {
  91. x*=a;
  92. if(x>=mod)
  93. x%=mod;
  94. }
  95. a=a*a;
  96. if(a>=mod)
  97. a%=mod;
  98. b>>=1;
  99. }
  100. return x;
  101. }
  102. typedef struct node
  103. {
  104. ll t,l,val;
  105. }node;
  106. bool compare(const node &x, const node &y)
  107. {
  108. //node x=*(node*)a;
  109. //node y=*(node*)b;
  110. if(x.t==y.t)
  111. return x.l<y.l;
  112. return x.t<y.t;
  113. }
  114. vector<node> arr;
  115. int main()
  116. {
  117. int t,n,i;
  118. ll min,n1,pos,flagit,flagit1,sum=0,sum1=0,calc;
  119. si(n);
  120. n1=n;
  121. rep(i,n)
  122. {
  123. node temp;
  124. //node temp=(node)malloc(sizeof(node));
  125. sl(temp.t);
  126. sl(temp.l);
  127. temp.val=temp.l-temp.t;
  128. arr.pb(temp);
  129. }
  130. sort(arr.begin(),arr.end(),compare);
  131. i=0;
  132. sum+=arr[0].l+arr[0].t;
  133. sum1+=sum-arr[0].t;
  134. arr.erase(arr.begin()+0);
  135. n--;
  136. while(n)
  137. {
  138. flagit=0;
  139. flagit1=0;
  140. i=0;
  141. min=mod;
  142. pos=-1;
  143. while(i<n)
  144. {
  145. if(arr[i].t<=sum)
  146. {
  147. flagit1=1;
  148. if(sum-arr[i].t+arr[i].l<min)
  149. {
  150. min=sum-arr[i].t+arr[i].l;
  151. pos=i;
  152. }
  153. }
  154. else
  155. {
  156. flagit=1;
  157. if(flagit1==0)
  158. {
  159. calc=arr[0].t+arr[0].l-sum;
  160. sum+=calc;
  161. sum1+=arr[0].l;
  162. arr.erase(arr.begin()+0);
  163. }
  164. else
  165. {
  166. sum+=arr[pos].l;
  167. sum1+=sum-arr[pos].t;
  168. arr.erase(arr.begin()+pos);
  169. }
  170. break;
  171. }
  172. i++;
  173. }
  174. /*if(flagit1==0)
  175. {
  176. printf("hie ONE n=%d sum=%lld\n",n,sum);
  177. calc=arr[0].l+arr[0].t-sum;
  178. sum+=calc;
  179. sum1+=arr[0].t;
  180. printf("calc=%lld sum=%lld sum1=%lld\n",calc,sum,sum1);
  181. arr.erase(arr.begin()+0);
  182. printf("hie\n");
  183. }*/
  184. if(flagit==0)
  185. {
  186. //printf("pos=%d sum=%lld\n",pos,sum);
  187. //printf("hie before n=%d pos=%lld\n",n,pos);
  188. if(pos==-1)
  189. pos=0;
  190. sum+=arr[pos].l;
  191. sum1+=sum-arr[pos].t;
  192. //printf("sum1=%lld sum=%lld \n",sum1,sum);
  193. arr.erase(arr.begin()+pos);
  194. //printf("hie after\n");
  195. }
  196. //printf("hie n=%d\n",n);
  197. n--;
  198. }
  199. //pln(sum1);
  200. sum1/=n1;
  201. pln(sum1);
  202. return 0;
  203. }
Advertisement
Add Comment
Please, Sign In to add comment