Cod sursa(job #2021236)

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

struct str{int in,out,nr;} oras[105];
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;
    sol+=oras[i].out;
  }
}

void calc_and_afis()
{
  int time=noras;
  fo<<sol<<'\n';
  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++;
      fo<<oras[loc].nr<<' '<<oras[i].nr<<'\n';
    }
  }
}
int main()
{
  citire();
  calc_and_afis();
  return 0;
}