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
#include "message.h"
#include "poszukiwania.h"
#include <cstdlib>
#include <cstdio>
#include <iostream>

using namespace std;

int M;
int N;

int max_int(int a, int b) {
  if (a > b) return a;
  return b;
}

int min_int(int a, int b) {
  if (a < b) return a; 
  return b;
}
 
bool jest_frag(int p) {
  for (int i = 0 ; i < M;  i++) {
    if (SignalAt(i + 1) != SeqAt(i + p + 1)) return false;
  }
  return true;
}

int main(int argc, char *argv[])
{      
  M = SignalLength();
  N = SeqLength();

  int num_of_nodes =  min_int(NumberOfNodes(), N - M + 1);
  int my_node = MyNodeId();

  if (M - N  > 0) {
    if (my_node ==0) cout<< "0" << endl;
    return 0; 
  }

  int dl =  N - M + 1;
  
  if (my_node < num_of_nodes) {
    long long  moja_suma = 0;

    int pocz = dl * my_node / num_of_nodes ;
    int koniec = dl * (my_node +1) / num_of_nodes;

    if (my_node ==  num_of_nodes - 1) koniec = dl;  
    
    for (int i = pocz; i < koniec ; i++) {
      //      cout << i << jest_frag(i)<< endl;
        if (jest_frag(i)) moja_suma++;
    }
    PutLL(0,moja_suma);
    Send(0);
  
  }
 
  if (my_node == 0) {
      long long suma_wsz = 0;

      for(int i = 0; i < num_of_nodes; i++) {
	Receive(i);
	suma_wsz += GetLL(i);
      }

      cout << suma_wsz << endl;
   }
}