Cod sursa(job #66891)

Utilizator raula_sanChis Raoul raula_san Data 21 iunie 2007 17:17:54
Problema Lupul Urias si Rau Scor 16
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <cstdio>
#include <queue>

#define MAX_N 100001

using namespace std;

long N, X, L;

long long unsigned SOL;

struct T
{
       long M, D, C;
} A[MAX_N];

class Compar
{
      public:
             bool operator()(T A, T B)
             {
                  return
                        A.M > B.M;
             }
};

priority_queue <T, vector <T>, Compar> H;

int main()
{
    FILE *f = fopen("lupu.in", "rt");
    FILE *g = fopen("lupu.out", "wt");

    long i, m, max;
    
    for(fscanf(f, "%ld %ld %ld", &N, &X, &L), i=1; i<=N; ++i)
    {
                  fscanf(f, "%ld %ld", &A[i].D, &A[i].C);
                  A[i].M = A[i].D > X ? -1 : (X - A[i].D) / L;
                  
                  H.push(A[i]);
    }

    for(i=1; i<=N; ++i)
    {
             A[i] = H.top();
             H.pop();       
    }

    for(i=1; A[i].M==-1; ++i);

    m = A[i].M;
    max = A[i].C;
    
    for(; i<=N; ++i)
    {
          if(A[i].M == m)
          {
                    if(A[i].C > max)
                              max = A[i].C;
          }
          else
          {
              SOL += max;
              m = A[i].M;
              max = A[i].C;
          }
    }

    SOL += max;

    fprintf(g, "%llu", SOL);
    
    fclose(f);
    fclose(g);
    
    return 0;
}