#include <cstdio>
#include "kollib.h"
#include "message.h"
#include <algorithm>
using namespace std;
int main()
{
if(MyNodeId()==0)
{
int nodes=min(NumberOfNodes(),NumberOfQueries()+1);
int *wyn=new int[NumberOfQueries()];
for(int a=nodes;a<=NumberOfQueries();++a)
{
int i=Receive(-1);
int query=GetInt(i);
wyn[query-1]=GetInt(i);
PutInt(i,a);
Send(i);
}
for(int a=1;a<nodes;++a)
{
int i=Receive(-1);
int query=GetInt(i);
wyn[query-1]=GetInt(i);
PutInt(i,-1);
Send(i);
}
for(int a=0;a<NumberOfQueries();++a)printf("%d\n",wyn[a]);
}else
{
int query=MyNodeId();
if(query>NumberOfQueries())return 0;
do
{
int value=0;
int from=QueryFrom(query);
int to=QueryTo(query);
if(from!=to)
{
int ostR=from,ostL=from;
int r=FirstNeighbor(from),l=SecondNeighbor(from);
++value;
while(r!=to && l!=to)
{
int f,s;
f=FirstNeighbor(r);
s=SecondNeighbor(r);
if(f==ostR)
{
ostR=r;
r=s;
}else
{
ostR=r;
r=f;
}
f=FirstNeighbor(l);
s=SecondNeighbor(l);
if(f==ostL)
{
ostL=l;
l=s;
}else
{
ostL=l;
l=f;
}
++value;
}
}
PutInt(0,query);
PutInt(0,value);
Send(0);
Receive(0);
query=GetInt(0);
}while(query!=-1);
}
return 0;
}
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 | #include <cstdio> #include "kollib.h" #include "message.h" #include <algorithm> using namespace std; int main() { if(MyNodeId()==0) { int nodes=min(NumberOfNodes(),NumberOfQueries()+1); int *wyn=new int[NumberOfQueries()]; for(int a=nodes;a<=NumberOfQueries();++a) { int i=Receive(-1); int query=GetInt(i); wyn[query-1]=GetInt(i); PutInt(i,a); Send(i); } for(int a=1;a<nodes;++a) { int i=Receive(-1); int query=GetInt(i); wyn[query-1]=GetInt(i); PutInt(i,-1); Send(i); } for(int a=0;a<NumberOfQueries();++a)printf("%d\n",wyn[a]); }else { int query=MyNodeId(); if(query>NumberOfQueries())return 0; do { int value=0; int from=QueryFrom(query); int to=QueryTo(query); if(from!=to) { int ostR=from,ostL=from; int r=FirstNeighbor(from),l=SecondNeighbor(from); ++value; while(r!=to && l!=to) { int f,s; f=FirstNeighbor(r); s=SecondNeighbor(r); if(f==ostR) { ostR=r; r=s; }else { ostR=r; r=f; } f=FirstNeighbor(l); s=SecondNeighbor(l); if(f==ostL) { ostL=l; l=s; }else { ostL=l; l=f; } ++value; } } PutInt(0,query); PutInt(0,value); Send(0); Receive(0); query=GetInt(0); }while(query!=-1); } return 0; } |
English