#include <bits/stdc++.h>
#include "poszukiwania.h"
#include "message.h"
using namespace std;
int n, m;
int id, nodes, matching_start, res, part_res, limit;
inline int get_matching_start(int id);
int main() {
n = SignalLength();
m = SeqLength();
id = MyNodeId();
nodes = NumberOfNodes();
matching_start = get_matching_start(id);
//printf("matching start: %d for %d\n", matching_start, id);
limit = min(m - n, get_matching_start(id + 1));
if(id == 0 || matching_start != get_matching_start(id - 1)) {
//printf("matching start: %d for %d\n", matching_start, id);
if(limit == 0) limit = m - n;
for(int i = matching_start; i < limit; ++i) {
//printf("comparing\n");
bool match = true;
for(int j = 0; j < n; ++j) {
//printf("%d:%d\n", j, i+j);
//printf("comparing %d with %d\n", SignalAt(j + 1), SeqAt(i+j + 1));
if(SignalAt(j + 1) != SeqAt(i + j + 1)) {
match = false;
break;
}
}
if(match) ++part_res;
}
}
if(id == 0) {
res = part_res;
for(int i = 1; i < nodes; ++i) {
Receive(i);
int msg = GetInt(i);
//printf("received %d from %d\n", msg, i);
res += msg;
}
printf("%d\n", res);
} else {
PutInt(0, part_res);
Send(0);
}
return 0;
}
inline int get_matching_start(int id) {
return id * ((m - n) / nodes);
}
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 | #include <bits/stdc++.h> #include "poszukiwania.h" #include "message.h" using namespace std; int n, m; int id, nodes, matching_start, res, part_res, limit; inline int get_matching_start(int id); int main() { n = SignalLength(); m = SeqLength(); id = MyNodeId(); nodes = NumberOfNodes(); matching_start = get_matching_start(id); //printf("matching start: %d for %d\n", matching_start, id); limit = min(m - n, get_matching_start(id + 1)); if(id == 0 || matching_start != get_matching_start(id - 1)) { //printf("matching start: %d for %d\n", matching_start, id); if(limit == 0) limit = m - n; for(int i = matching_start; i < limit; ++i) { //printf("comparing\n"); bool match = true; for(int j = 0; j < n; ++j) { //printf("%d:%d\n", j, i+j); //printf("comparing %d with %d\n", SignalAt(j + 1), SeqAt(i+j + 1)); if(SignalAt(j + 1) != SeqAt(i + j + 1)) { match = false; break; } } if(match) ++part_res; } } if(id == 0) { res = part_res; for(int i = 1; i < nodes; ++i) { Receive(i); int msg = GetInt(i); //printf("received %d from %d\n", msg, i); res += msg; } printf("%d\n", res); } else { PutInt(0, part_res); Send(0); } return 0; } inline int get_matching_start(int id) { return id * ((m - n) / nodes); } |
English