1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream>
#include "kollib.h"
#include "message.h"
int main()
{
	long long n;
	n = NumberOfStudents();
	//Muszę stworzyć tablicę w kolejności jak oni siedzą
	long long *table = new long long[n];
	table[0] = 1;
	table[1] = FirstNeighbor(1);
	for ( long long y = 1; y < n - 1; y++ )//Zabrałem +1 od n i dałem -1
	{
		if( FirstNeighbor(table[y]) == table[y-1] )
		{
			table[y+1] = SecondNeighbor(table[y]);
		}
		else
		{
			table[y+1] = FirstNeighbor(table[y]);
		}
	}
	//Czas na liczenie
	int m = NumberOfQueries();//Liczba zapytań
	int v1=0, v2=0;//Przełączniki
	long long Czas1 = 0, Czas2 = 0;
	for( int y = MyNodeId() + 1; y < NumberOfQueries(); y += NumberOfNodes() )
	{
		if( QueryFrom(y) == QueryTo(y) )
		{
			Czas1 = 0;
		}
		else
		{
			long long u = 0;
			Czas1 = 0;
			Czas2 = 0;
			v1 = 0;
			v2 = 0;
			while ( 1 )//Bo raczej będzie trwać dłużej niż n
			{
				if( u >= n )//Przeskakiwanie początku
				{
					u = 0;
				}
				if( v1 == 1 )
				{
					Czas1++;
				}
				if( v2 == 1)
				{
					Czas2++;
				}
				if( table[u] == QueryFrom(y) )//Jak natrafimy na początek
				{
					if( v1 == 0 )//Pierwszy raz
					{
						v1 = 1; //Odpalenie pierwszego zegara
					}
					else//Drugi lub jakims cudem kolejny
					{
						break;
					}
				}
				if( table[u] == QueryTo(y) )//Jak natrafimy na koniec
				{
					if( v1 == 1 )//Czyli juz natrafilem raz na poczatek
					{
						v1 = 2;//Wstrzymanie pierwszego zegara
						v2 = 1;//Odpalenie drugiego zegara
					}
				}
				u++;
			}
		}
		//Wyciagnac krotszy czas
		if( Czas1 > Czas2 )
		{
			Czas1 = Czas2;//Czas1 zawsze jest tym najmniejszym
		}
		//Wysyłka
		PutLL( 0, Czas1 );
		Send(0);
	}
	//Wyświetlanie wyników
	for (int instancja = 1; instancja < NumberOfNodes(); ++instancja) 
	{
	  Receive(instancja);
	  std::cout << GetLL(instancja) << std::endl;
	}
}