Guest User

Untitled

a guest
Jun 24th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.36 KB | None | 0 0
  1. type
  2.   TNode = record
  3.     key,value : longint;
  4.   end;
  5. const
  6.   inputfile = 'coupons.in';
  7.   outputfile = 'coupons.out';
  8.  
  9. var
  10.   que : array [0..100000] of TNode;
  11.   size : longint;
  12.   n,k,i,ans : longint;
  13.   m : int64;
  14.   p,c : array [1..100000] of longint;
  15.  
  16.  
  17.   procedure sort(l,r : longint);
  18.   var
  19.     i,j,x,y,tmp : longint;
  20.   begin
  21.     i:=l; j:=r; y:=p[l+random(r-l+1)]; x:=c[l+random(r-l+1)];
  22.     repeat
  23.       while (x>c[i]) or ((x=c[i]) and (y>p[i])) do inc(i);
  24.       while (x<c[j]) or ((x=c[j]) and (y<p[j])) do dec(j);
  25.       if (j<i) then break;
  26.       tmp:=p[i]; p[i]:=p[j]; p[j]:=tmp;
  27.       tmp:=c[i]; c[i]:=c[j]; c[j]:=tmp;
  28.       inc(i); dec(j);
  29.     until (j<i);
  30.     if (l<j) then sort(l,j);
  31.     if (i<r) then sort(i,r);
  32.   end;
  33.  
  34.   procedure hswap(var x,y : TNode);
  35.   var
  36.     tmp : TNode;
  37.   begin
  38.     tmp:=x; x:=y; y:=tmp;
  39.   end;
  40.  
  41.   procedure push(x,y : longint);
  42.   begin
  43.     inc(size);
  44.     que[size].key:=x;
  45.     que[size].value:=y;
  46.     while (size>1) and (que[size div 2].key>que[size].key) do
  47.       hswap(que[size div 2],que[size]);
  48.   end;
  49.  
  50.   procedure pop;
  51.   var
  52.     cur : longint;
  53.   begin
  54.     que[1]:=que[size];
  55.     dec(size);
  56.     cur:=1;
  57.     while (que[cur*2].key<que[cur].key) or
  58.           (que[cur*2+1].key<que[cur].key) do begin
  59.             if (que[cur*2].key<que[cur*2+1].key)
  60.               then begin
  61.                 hswap(que[cur*2],que[cur]);
  62.                 cur:=cur*2;
  63.               end
  64.               else begin
  65.                 hswap(que[cur*2+1],que[cur]);
  66.                 cur:=cur*2+1;
  67.               end;
  68.           end;
  69.   end;
  70.  
  71.  
  72. begin
  73.   assign(input,inputfile);
  74.   reset(input);
  75.   assign(output,outputfile);
  76.   rewrite(output);
  77.   readln(n,k,m);
  78.   for i:=1 to n do readln(p[i],c[i]);
  79.   fillchar(que,sizeof(que),$7f);
  80.   sort(1,n);
  81.   i:=1; ans:=0;
  82.   while (k>0) and (m-c[i]>0) do begin
  83.     push(p[i]-c[i],i);
  84.     k:=k-1;
  85.     m:=m-c[i];
  86.     inc(ans);
  87.     inc(i);
  88.   end;
  89.   while (i<=n) do begin
  90.     if (p[i]<c[i]+que[1].key)
  91.       then begin
  92.         if (m-p[i]>0)
  93.           then begin m:=m-p[i]; ans:=ans+1; end;
  94.       end
  95.       else begin
  96.         if (m-c[i]-que[1].key>0)
  97.           then begin
  98.             m:=m-c[i]-que[1].key;
  99.             pop;
  100.             push(p[i]-c[i],i);
  101.             ans:=ans+1;
  102.           end;
  103.       end;
  104.     inc(i);
  105.   end;
  106.   writeln(ans);
  107.   close(input);
  108.   close(output);
  109. end.
Add Comment
Please, Sign In to add comment