Cod sursa(job #830469)

Utilizator lily3Moldovan Liliana lily3 Data 6 decembrie 2012 22:04:34
Problema Taramul Nicaieri Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<fstream>
#include<algorithm>
#include<vector>
using namespace std;
 
int i,j,n,m,k,aux,nr=0;
int ok,x,y,t[101][101];
bool v[101][101],viz[101];
struct harta
{
    int out,in,poz;
};
harta a[101],b[101];
bool cmp(harta a,harta b)
{
    if(a.out==b.out)
    return a.poz<b.poz;
    return a.out>b.out;
}
bool cmp1(harta a,harta b)
{
    if(a.in==b.in)
    return a.poz>b.poz;
    return a.in>b.in;
}
int main()
{
    ifstream f("harta.in");
    ofstream g("harta.out");
    f>>n;
    for(i=1;i<=n;++i)
    {
    f>>a[i].out>>a[i].in;
	if(a[i].in)
		viz[i]=1;
    nr+=a[i].out;
    a[i].poz=i;
    b[i]=a[i];
    }
	g<<nr<<"\n";
    sort(a+1,a+n+1,cmp);
    for(i=1;i<=n;++i)
    {
        sort(b+1,b+n+1,cmp1);
	    j=1;
        while(a[i].out>0&&j<=n)
        {
            x=a[i].poz,y=b[j].poz;
			if(x!=y&&b[j].in)
			{
			v[x][y]=1;
			t[y][++t[y][0]]=x;
        --a[i].out;
        --b[j].in;
        //v[x][y]=1;
        //t[y][++t[y][0]]=x;
       /*else
        {
        v[t[y][t[y][0]]][y]=0;
        v[x][y]=1;
        t[y][t[y][0]]=x;
        }*/
			}
			++j;
        }
		j=1;
		if(a[i].out)
		{
			while(!viz[b[j].poz])
				++j;
			x=a[i].poz,y=b[j].poz;
			v[x][y]=1;
			v[t[y][t[y][0]]][y]=0;
			++a[t[y][0]].out;
			t[y][t[y][0]]=x;
			
		}
			
    }
	for(i=1;i<=n;++i)
		for(j=1;j<=n;++j)
			if(v[i][j])
				g<<i<<" "<<j<<"\n";
    return 0;
}