Cod sursa(job #2021232)

Utilizator CodrinsahCotarlan Codrin Codrinsah Data 12 septembrie 2017 21:56:10
Problema Taramul Nicaieri Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fi ("harta.in");
ofstream fo ("harta.out");

struct str{int in,out,nr;} oras[105],solutie[10005];
int noras,i,sol;

bool comp(str x,str y)
{
  if (x.in>y.in) return 1;
  if (x.in<y.in) return 0;
  if (x.out>y.out) return 1;
  return 0;
}

void citire()
{
  fi>>noras;
  for (i=1;i<=noras;i++)
  {
    fi>>oras[i].out;
    fi>>oras[i].in;
    oras[i].nr=i;
  }
}

void calc()
{
  int time=noras;
  while (time)
  {
    int lim=0,loc=0;
    time--;lim=0;
    sort(oras+1,oras+noras+1,comp);
    for (i=1;i<=noras;i++)
      if (oras[i].out>lim)
      {
        lim=oras[i].out;
        loc=i;
      }
    for (i=1;i<=lim+1;i++)
      if (i!=loc and oras[loc].out>0)
    {
      oras[i].in--;
      oras[loc].out--;
      sol++;
      solutie[sol].out=oras[loc].nr;
      solutie[sol].in=oras[i].nr;
    }
  }
}

void afis()
{
  fo<<sol<<'\n';
  for (i=1;i<=sol;i++) fo<<solutie[i].out<<' '<<solutie[i].in<<'\n';
}
int main()
{
  citire();
  calc();
  afis();
  return 0;
}