Cod sursa(job #1740161)

Utilizator moise_alexandruMoise Alexandru moise_alexandru Data 11 august 2016 00:07:50
Problema Lupul Urias si Rau Scor 12
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <algorithm>
#include <iostream>
#include <cassert>
#include <fstream>
#include <bitset>
using namespace std;
ifstream in("lupu.in");
ofstream out("lupu.out");
const int maxn = 100005;
pair <int, int> v[maxn];
bool luat[maxn];
int T[maxn];
inline bool cmp(pair <int, int> a, pair <int, int> b)
{
    if(a.first > b.first)
        return 1;
    if(a.first < b.first)
        return 0;
    return a.second >= b.second;
}

int main()
{
    int n, x, l;
    in >> n >> x >> l;
    for(int i = 1; i <= n; i++)
        in >> v[i].second >> v[i].first;
    sort(v + 1, v + n + 1, cmp);
    for(int i = 1; i <= n; i++)
        cerr << v[i].first << " " << v[i].second << "\n";
    cerr << "\n";
    for(int i = 1; i <= n; i++)
    {
        int timp = v[i].second / l - 1;
        //if(v[i].second % l == 0)
        //    timp++;
        T[i] = timp;
    }
    int sol = 0;
    int nr = 0;
    for(int i = 1; i <= n; i++)
    {
        for(int j = i; j <= n && v[i].first == v[j].first; j++)
        {
            assert(T[j] < 100005);
            int aux = T[j];
            if((nr * l <= x) && (luat[aux] == 0))
            {
                luat[aux] = 1;
                sol += v[j].first;
                nr++;
                //cerr << v[j].first << " " << v[j].second << "\n";
            }
        }
    }
    out << sol << "\n";
    return 0;
}