Cod sursa(job #466661)

Utilizator bog29Antohi Bogdan bog29 Data 27 iunie 2010 12:56:20
Problema Congr Scor 10
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 1 Marime 0.93 kb
#include<fstream>
#include<vector>
#define dmax 300005
using namespace std;
ifstream in("congr.in");
ofstream out("congr.out");

int n,x[dmax],crt,ok;
vector<int>r[dmax];
vector<int>::iterator it;

struct st
{	int x;
	int y;
}	sol[dmax];

void bkt(int k,int s,int nr,int st)
{	int i,j;
	if(ok)
	{	
	if(s%n==0 && nr==n)
	{	for(i=1;i<k;i++)
			for(j=0;j<sol[i].y;j++)
				out<<r[sol[i].x][j]<<" ";
		/*for(i=1;i<k;i++)
			out<<sol[i].x<<" ";
		out<<'\n';
		for(i=1;i<k;i++)
			out<<sol[i].y<<" ";
		out<<'\n'<<'\n';*/
		ok=0;
	}	
	else
	{	for(i=st;i<n;i++)
			for(j=1;j<=x[i];j++)
			{	sol[k].x=i;	
				sol[k].y=j;
				x[i]-=j;
				if(nr+j <= n);
					bkt(k+1,s+i*j,nr+j,i+1);
				x[i]+=j;
			}	
	}
	}
}

int main()
{	int i,a;
	in>>n;
	for(i=1;i<2*n;i++)
	{	in>>a;
		while(a>=n)
			a-=n;
		x[a]++;
		r[a].push_back(i);
	}
	in.close();
	crt=0;
	ok=1;
	bkt(1,0,0,1);
	out.close();
	return 0;
}