Cod sursa(job #1199216)

Utilizator mikeshadowIon Complot mikeshadow Data 18 iunie 2014 16:25:06
Problema Taramul Nicaieri Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <math.h>
#include <string.h>
#include <string>
#include <vector>
#include <map>

using namespace std;

#define max(a,b) ((a>b)?a:b)

#define TEST
#ifdef TEST
ifstream fin("harta.in");
ofstream fout("harta.out");
#else
#define fin cin
#define fout cout
#endif

int n;

int a[100];
int b[100];

struct ed
{
    int x, y;
};

vector<ed> rez;


int main()
{
    fin>>n;


    for(int i=0; i<n; i++)
    {
        fin>>a[i]>>b[i];
    }

    int c=-1;

    for (int i=0; i<n; i++)
    {
        for (int j=0; j<n && a[i]; j++)
        {
            if ((j!=i)&&b[j]) {ed t; t.x=i; t.y = j; rez.push_back(t); b[j]--; a[i]--;}
        }
        if (a[i]) c=i;
    }

    if (rez.size()&& c!=-1)
    {
        int t = rez[0].y;
        rez[0].y = c;
        ed tmp;
        tmp .x = c;
        tmp.y = t;
        rez.push_back(tmp);
    }

    fout<<rez.size();
    fout<<'\n';
    for(int i=0; i<rez.size(); i++)
        fout<<rez[i].x+1<<' '<<rez[i].y+1<<'\n';

    return 0;
}