Cod sursa(job #17693)

Utilizator vlad_popaVlad Popa vlad_popa Data 16 februarie 2007 18:11:46
Problema Taramul Nicaieri Scor 55
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
using namespace std;

#include <cstdio>
#include <algorithm>

#define FIN "harta.in"
#define FOUT "harta.out"
#define NMAX 101

int N, a[NMAX][NMAX], ind[NMAX];
struct nod {int go, come;};
nod v[NMAX];

int cmp (const int a, const int b)
{
  return v[a].come < v[b].come;
}

int
 main ()
{
  freopen (FIN, "rt", stdin);
  freopen (FOUT, "wt", stdout);

  scanf ("%d", &N);
  for (int i = 1; i <= N; ++ i)
   {
     scanf ("%d%d", &v[i].go, &v[i].come);
     ind[i] = i;
   }
  for (int i = 1; i <= N; ++ i)
   {
     sort (ind+1, ind+N+1, cmp);
     for (int j = N; j >= 1; -- j)
       if (i != ind[j])
         if (v[ind[j]].come && v[i].go)
          {
            -- v[ind[j]].come;
            -- v[i].go;
            a[i][ind[j]] = 1;
          }
   }
  int sol = 0;
  for (int i = 1; i <= N; ++ i)
    for (int j = 1; j <= N; ++ j)
      if (a[i][j])
        ++ sol;
  printf ("%d\n", sol);
  for (int i = 1; i <= N; ++ i)
    for (int j = 1; j <= N; ++ j)
      if (a[i][ind[j]])
        printf ("%d %d\n", i, ind[j]);
  return 0;
}