Pagini recente » Cod sursa (job #1482593) | Cod sursa (job #528295) | Cod sursa (job #1210057) | Cod sursa (job #136303) | Cod sursa (job #1740161)
#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;
}