Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
25/10/09 10:32
aazzarone
#include <fstream>
using namespace std;

/* Costanti */
const int MAX_N = 1000000;
const int MAX_K = MAX_N-1;

/* Variabili globali */
int N, K, T;
int adj[MAX_N];
int vetK1[MAX_K]; /* dove si trova l'amico i */
bool vetK2[MAX_K]; /* nella posizione i si trova qualche amico ? */
int vetK3[MAX_K]; /* nella posizione i quale amico si trova?*/
bool madeK[MAX_N]; /* é già stata calcolato precedentemente? */

/* dist1 e dist2 si riferiscono a seconda del ciclo a origini diverse (in questo
 * modo evitiamo di creare matrici di grosse dimensioni */
int dist1[MAX_N]; /* la posizione x a quale distanza si trova? */
int dist2[MAX_N]; /* alla distanza x quale posizione del tavolo si trova? */

int sol1[MAX_N]; /* utilizzato nel momento in cui più amici si trovano nello stesso ciclo */
bool sol2[MAX_N]; /* alla fine se sol2[i] == true allora sappiamo che nella posizione i si trova un 'amico */


int main ()
{
	/* Variabili di input */
	ifstream in ("input.txt");
	
	/* Variabili di output */
	ofstream out ("output.txt");
	
	/* Variabili contatore */
	int i, j, k, l;
	
	/* Variabili di lavoro */
	int a;
	
	/* Lettura file di input */
	in >> N >> K >> T;
	
	for (i=0; i<N; i++)
	{
		in >> adj[i];
		adj[i]--;
	}
	
	for (i=0; i<K; i++)
	{
		in >> vetK1[i];
		vetK1[i]--; /* consideriamo gli indici a partire da 0 e nn da 1 */
		vetK2[vetK1[i]] = true;
		vetK3[vetK1[i]] = i;
	}
	
	/* Fine lettura file di input */
	l = 0;
	for (i=0; i<K; i++)
	{	
		if (!madeK[i])
		{			
			k = 0;
			dist1[vetK1[i]] = 0;
			dist2[0] = vetK1[i];
			sol1[0] = vetK1[i];
			
			l = 0;
			
			for (j=adj[vetK1[i]]; j!=vetK1[i]; j=adj[j])
			{
				dist1[j] = ++k;
				dist2[k] = j;
				
				if (vetK2[j])
					sol1[++l] = j;
					
			}
			
			/* ... e se due amici si trovassero nello stesso ciclo? */	
			for (j=0; j<=l; j++)
			{
				a = (dist1[sol1[j]] + T) % (k+1);
				
				sol2[dist2[a]] = true;
				
				madeK[vetK3[sol1[j]]] = true;
			}
		}
	}
	
	if (sol2[N-1])
	{
		for (i=N-1; sol2[i]; i--) ;
		i++;
	}
	else
		for (i=0; !sol2[i]; i++) ;
	
	/* Stampa le soluzioni */	
	out << i+1 << endl; /* Ricorda che nel programma gli indici partivano da 0 e non da 1 */
	
	/* Fine programma */
	in.close ();
	out.close ();
	return 0;
}
Ultima modifica effettuata da aazzarone 25/10/09 10:35
aaa
25/10/09 11:00
theprogrammer
Cosa vuol dire questo thread?

E' una richiesta di aiuto? Per cosa?
aaa
25/10/09 11:52
aazzarone
niente... ho semplicemente postato la mia soluzione
aaa
25/10/09 12:01
theprogrammer
Postato originariamente da aazzarone:

niente... ho semplicemente postato la mia soluzione


Ma chi aveva posto il problema? Di quale thread parliamo?

Un forum non funziona cosi' ...
aaa
01/11/09 15:57
HeDo
Postato originariamente da aazzarone:

niente... ho semplicemente postato la mia soluzione


un post con solo un programma senza spiegazioni/presentazioni/richieste è inammissibile.

chiudo.
aaa