#include <stdio.h> #include "message.h" #include "poszukiwania.h" using namespace std; long long int n, m; long long int potega = 999983; long long int potega_usuwana = 999983; long long int hasz_kosmiczny = 0; long long int modulo = 1e9+21; long long int hasz_naukowy = 0; long long int do_odjecia; int odpowiedz = 0; int main() { if(MyNodeId() == 0) { n = SignalLength(); m = SeqLength(); for(int i = 0; i < n; i++) { hasz_kosmiczny += (SignalAt(i+1)+7)*potega; hasz_kosmiczny %= modulo; potega *= 999983; potega %= modulo; } potega = 999983; for(int i = 0; i < n; i++) { hasz_naukowy += (SeqAt(i+1)+7)*potega; hasz_naukowy %= modulo; potega *= 999983; potega %= modulo; } if(hasz_kosmiczny == hasz_naukowy) odpowiedz++; for(int i = n; i < m; i++) { hasz_naukowy += (SeqAt(i+1)+7)*potega; hasz_naukowy %= modulo; do_odjecia = (SeqAt(i-n+1)+7)*potega_usuwana; do_odjecia %= modulo; hasz_naukowy -= do_odjecia; while(hasz_naukowy < 0) hasz_naukowy += modulo; hasz_kosmiczny *= 999983; hasz_kosmiczny %= modulo; if(hasz_naukowy == hasz_kosmiczny) odpowiedz++; potega *= 999983; potega %= modulo; potega_usuwana *= 999983; potega_usuwana %= modulo; } printf("%d\n", odpowiedz); } 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 | #include <stdio.h> #include "message.h" #include "poszukiwania.h" using namespace std; long long int n, m; long long int potega = 999983; long long int potega_usuwana = 999983; long long int hasz_kosmiczny = 0; long long int modulo = 1e9+21; long long int hasz_naukowy = 0; long long int do_odjecia; int odpowiedz = 0; int main() { if(MyNodeId() == 0) { n = SignalLength(); m = SeqLength(); for(int i = 0; i < n; i++) { hasz_kosmiczny += (SignalAt(i+1)+7)*potega; hasz_kosmiczny %= modulo; potega *= 999983; potega %= modulo; } potega = 999983; for(int i = 0; i < n; i++) { hasz_naukowy += (SeqAt(i+1)+7)*potega; hasz_naukowy %= modulo; potega *= 999983; potega %= modulo; } if(hasz_kosmiczny == hasz_naukowy) odpowiedz++; for(int i = n; i < m; i++) { hasz_naukowy += (SeqAt(i+1)+7)*potega; hasz_naukowy %= modulo; do_odjecia = (SeqAt(i-n+1)+7)*potega_usuwana; do_odjecia %= modulo; hasz_naukowy -= do_odjecia; while(hasz_naukowy < 0) hasz_naukowy += modulo; hasz_kosmiczny *= 999983; hasz_kosmiczny %= modulo; if(hasz_naukowy == hasz_kosmiczny) odpowiedz++; potega *= 999983; potega %= modulo; potega_usuwana *= 999983; potega_usuwana %= modulo; } printf("%d\n", odpowiedz); } return 0; } |