#include "poszukiwania.h"
#include "message.h"
#include <iostream>
#include <algorithm>
using namespace std;
unsigned long long x, t, a, ile, sum, i, j, M, S, N, NON, MNI;
unsigned long long b, c, r;
unsigned long long wyn, xp, wzor;
bool czy;
int main()
{
ios_base::sync_with_stdio(0);
NON = NumberOfNodes();
MNI = MyNodeId();
M = SeqLength();
S = SignalLength();
N = M - S + 1;
x = 1000000007;
t = N % NON;
if (MNI < t)
{
ile = (N / NON) + 1;
a = MNI * ile;
}
else
{
ile = N / NON;
a = (MNI * ile) + t;
};
/*
r = S % NON;
if (MNI < r)
{
c = (S / NON) + 1;
b = MNI * c;
}
else
{
c = S / NON;
b = (MNI * c) + r;
};
*/
wzor = 0;
for (i = 0; i < S; i++)
{
wzor = wzor * x;
wzor = wzor + SignalAt(i+1);
}
wyn = 0;
sum = 0;
xp=1;
for (i=0; i<S-1; i++)
xp = xp*x;
for (i = a; i < a + S - 1; i++)
{
wyn = wyn * x;
wyn = wyn + SeqAt(i+1);
}
for (i = a + S - 1; i < a + S - 1 + ile; i++)
{
wyn = wyn * x;
wyn = wyn + SeqAt(i+1);
if (wyn == wzor)
{
czy = true;
for (j = 0; (j < S) && (j < 10) && czy; j++)
if (SeqAt(j + i - S + 1+1) != SignalAt(j+1))
czy = false;
if (czy)
sum++;
}
wyn = wyn - xp * SeqAt(i - S + 1 + 1);
// cout << "instancja: " << MNI << " " << sum <<"\n";
}
if (MNI > 0)
{
PutLL(0, sum);
Send(0);
}
else
{
long long gsum;
for (i = 1; i < NON; i++)
{
Receive(i);
gsum = GetLL(i);
sum = sum + gsum;
// cout << "otrzymalem: " << gsum << "\n";
};
cout << sum;
};
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 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | #include "poszukiwania.h" #include "message.h" #include <iostream> #include <algorithm> using namespace std; unsigned long long x, t, a, ile, sum, i, j, M, S, N, NON, MNI; unsigned long long b, c, r; unsigned long long wyn, xp, wzor; bool czy; int main() { ios_base::sync_with_stdio(0); NON = NumberOfNodes(); MNI = MyNodeId(); M = SeqLength(); S = SignalLength(); N = M - S + 1; x = 1000000007; t = N % NON; if (MNI < t) { ile = (N / NON) + 1; a = MNI * ile; } else { ile = N / NON; a = (MNI * ile) + t; }; /* r = S % NON; if (MNI < r) { c = (S / NON) + 1; b = MNI * c; } else { c = S / NON; b = (MNI * c) + r; }; */ wzor = 0; for (i = 0; i < S; i++) { wzor = wzor * x; wzor = wzor + SignalAt(i+1); } wyn = 0; sum = 0; xp=1; for (i=0; i<S-1; i++) xp = xp*x; for (i = a; i < a + S - 1; i++) { wyn = wyn * x; wyn = wyn + SeqAt(i+1); } for (i = a + S - 1; i < a + S - 1 + ile; i++) { wyn = wyn * x; wyn = wyn + SeqAt(i+1); if (wyn == wzor) { czy = true; for (j = 0; (j < S) && (j < 10) && czy; j++) if (SeqAt(j + i - S + 1+1) != SignalAt(j+1)) czy = false; if (czy) sum++; } wyn = wyn - xp * SeqAt(i - S + 1 + 1); // cout << "instancja: " << MNI << " " << sum <<"\n"; } if (MNI > 0) { PutLL(0, sum); Send(0); } else { long long gsum; for (i = 1; i < NON; i++) { Receive(i); gsum = GetLL(i); sum = sum + gsum; // cout << "otrzymalem: " << gsum << "\n"; }; cout << sum; }; return 0; } |
English