Cod sursa(job #3197695)

Utilizator TomMMMMatei Toma TomMMM Data 27 ianuarie 2024 11:54:04
Problema Lupul Urias si Rau Scor 44
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("lupu.in");
ofstream fout("lupu.out");
ofstream test("test.out");

int Nr_oi, L_jump,O_jump;
pair<int, int> oi[100005];//first = timp ; second = lana
priority_queue<int> myQ;

int convert( int dist ){
    return ( L_jump - dist ) / O_jump ;
}

void read(){
    fin>> Nr_oi >> L_jump >> O_jump;
    for( int i=1 ;i <= Nr_oi ;i++ ){
        int dist , lana ;
        fin>> dist >> lana;
        oi[ i ] . first = convert( dist );
        oi[ i ] . second = lana;
    }
}
void sorT(){
    int sem;
    do{
        sem=0;
        for(int i=1; i<Nr_oi;i++){
            if(oi[i].first>oi[i+1].first){
                swap(oi[i],oi[i+1]);
                sem=1;
            }
        }
    }while(sem);
}

void afis(){
    test<<"timp: ";
    for(int i=1;i<=Nr_oi;i++){
        test<<oi[i].first<<" ";
    }
    test<<endl<<"lana: ";
    for(int i=1;i<=Nr_oi;i++){
        test<<oi[i].second<<" ";
    }

}

int main() {

    read();
    sorT();

    //afis();
    int timp = oi[ Nr_oi ] . first;
    int poz = Nr_oi;
    long sol = 0;
    oi[ 0 ] . first = -1;

    for( int t=timp ;t >= 0 ;t-- ){

        while( oi[ poz ] . first == t ){
            myQ.push( oi[ poz ] . second );
            poz--;
        }

        if( ! myQ . empty() ){
            sol += myQ . top();
            myQ . pop();
        }

    }
    fout << sol;
}