Cod sursa(job #830461)
#include<fstream>
#include<algorithm>
using namespace std;
struct nod
{
int vo,vi;
};
nod a[101];
int n,m,i,j,x,y,mi[101],mo[101],nr;
bool b[101][101],c[101][101];
/*int cmp(int x, int y)
{
if(a[x].vi==a[y].vi)
return x>y;
return a[x].vi>a[y].vi;
}*/
int cmp(int x, int y)
{
if(a[x].vi==a[y].vi)
return a[x].vo>a[y].vo;
return a[x].vi>a[y].vi;
}
int cmp1(int x, int y)
{
if(a[x].vo==a[y].vo)
return x<y;
return a[x].vo>a[y].vo;
}
int main()
{
ifstream f("harta.in");
ofstream g("harta.out");
f>>n;
nr=n;
for(i=1;i<=n;++i)
{
mi[i]=mo[i]=i;
f>>a[i].vo>>a[i].vi;
m+=a[i].vo;
}
sort(mi+1,mi+n+1,cmp);
sort(mo+1,mo+n+1,cmp1);
g<<m<<"\n";
for(i=1;i<=n;++i)
{
j=1;
nr=0;
while(a[mo[i]].vo)
{
if(mo[i]!=mi[j])
{
g<<mo[i]<<" "<<mi[j]<<"\n";
a[mi[j]].vi--;
a[mo[i]].vo--;
}
j++;
}
sort(mi+1,mi+n+1,cmp);
}
}