Cod sursa(job #2039553)

Utilizator liviu2000Dragomirescu Liviu liviu2000 Data 14 octombrie 2017 17:26:17
Problema Taramul Nicaieri Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

vector <pair<int,int> > plec ;
vector <pair<int,int> > sos ;
int n , m ;
ofstream fout ("harta.out") ;

bool compara ( pair<int,int> a , pair<int,int> b )
{
    return a.first < b.first ;
}

void citire ()
{
    int i , x , y ;
    ifstream fin ("harta.in") ;
    fin >> n ;
    for ( i = 1 ; i <= n ; i++ )
    {
        fin >> x >> y ;
        plec.push_back(make_pair(x,i)) ;
        sos.push_back(make_pair(y,i)) ;
        m = m + x ;
    }
    fout << m << endl ;
}

int main()
{
    int i , j ;
    citire() ;
    sort(sos.begin(),sos.end(),compara) ;
    for ( i = sos.size()-1 ; i >= 0 ; i-- )
    {
        sort(plec.begin(),plec.end(),compara) ;
        for ( j = plec.size()-1 ; j >= 0 ; j-- )
        {
            if ( sos[i].second != plec[j].second )
            {
                //cout << " pun muchie intre " << plec[i].second << " " << sos[i].second << endl ;
                if ( sos[i].first > 0 && plec[j].first > 0 )
                {
                    fout << plec[j].second << " " << sos[i].second << endl ;
                    sos[i].first-- ;
                    plec[j].first-- ;
                }
            }
        }
    }
}