#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; } |