Cod sursa(job #2039567)

Utilizator liviu2000Dragomirescu Liviu liviu2000 Data 14 octombrie 2017 17:40:23
Problema Taramul Nicaieri Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 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 ;
bool mat[101][101] ;
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++ )
        for ( x = 1 ; x <= n ; x++ )
            mat[i][x] = false ;
    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 && mat[plec[j].second][sos[i].second] == false)
                {
                    fout << plec[j].second << " " << sos[i].second << endl ;
                    mat[plec[j].second][sos[i].second] = true ;
                    sos[i].first-- ;
                    plec[j].first-- ;
                }
            }
        }
    }
}