Cod sursa(job #473298)

Utilizator lianaliana tucar liana Data 28 iulie 2010 16:32:24
Problema Shop Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.54 kb
program shop;
var f, g:text;
    max, poz, rez, sc, nrnv, n, c, l, aux:int64;
    i, j:longint;
    p, a, b, vpoz, vsc:array[1..100] of int64;

procedure citire;
  begin
    readln(f,n,c,l);
    for i:=1 to n do
      begin
        read(f,a[i],b[i]);
        vpoz[i]:=i;
      end;
  end;

procedure sortare;
  begin
    for i:=1 to n-1 do
      begin
        max:=a[i];
        poz:=i;
        for j:=i+1 to n do
          if a[j]>max then
            begin
              max:=a[j];
              poz:=j;
            end;
        aux:=a[i];
        a[i]:=a[poz];
        a[poz]:=aux;
        aux:=b[i];
        b[i]:=b[poz];
        b[poz]:=aux;
        aux:=vpoz[i];
        vpoz[i]:=vpoz[poz];
        vpoz[poz]:=aux;
      end;
  end;

function min(q,w:longint):longint;
  begin
    if q<w then
      min:=q
     else
       min:=w;
  end;

procedure rezolvare;
  begin
    a[n+1]:=0;
    p[n+1]:=1;
    for i:=n downto 1 do
      begin
        p[i]:=p[i+1];
        for j:=a[i+1]+1 to a[i] do
          p[i]:=p[i]*c;
      end;
    for i:=1 to n do
      begin
        nrnv:=l div p[i];
        sc:=min(nrnv,b[i]);
        vsc[i]:=sc;
        l:=l-sc*p[i];
        rez:=rez+sc;
      end;
    writeln(g,rez);
    for i:=1 to n do
      for j:=1 to n do
        if vpoz[j]=i then
          write(g,vsc[j],' ');
    writeln(g);
  end;

  begin
    assign(f,'shop.in'); reset(f);
    assign(g,'shop.out'); rewrite(g);
    citire;
    sortare;
    rezolvare;
    close(f);
    close(g);
  end.