Pagini recente » Cod sursa (job #1859528) | Cod sursa (job #3224725) | Cod sursa (job #2943629) | Cod sursa (job #889169) | Cod sursa (job #2021232)
#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;
}