#include <cstdio> unsigned long long int haszprzod[ 4 ]; unsigned long long int hasztyl[ 4 ]; unsigned long long int liczba[ 4 ]; unsigned long long int mnoz[] = { 5, 7, 26, 2137 }; unsigned long long int modulo[] = { 1000000007, 1000000009, 1000696969, 1000000933 }; int main() { int n; scanf( "%d ", &n ); char c = '0'; for( int i = 0; i < 4; ++i ) liczba[ i ] = 1; while( true ) { c = getchar_unlocked(); if( c == EOF ) break; if( c == 10 ) continue; for( int i = 0; i < 4; ++i ) { haszprzod[ i ] *= mnoz[ i ]; haszprzod[ i ] += c; haszprzod[ i ] %= modulo[ i ]; unsigned long long int a = liczba[ i ] * c; a %= modulo[ i ]; hasztyl[ i ] += a; hasztyl[ i ] %= modulo[ i ]; liczba[ i ] *= mnoz[ i ]; liczba[ i ] %= modulo[ i ]; } } for( int i = 0; i < 4; ++i ) { if( hasztyl[ i ] != haszprzod[ i ] ) { puts("NIE"); return 0; } } puts("TAK"); 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 | #include <cstdio> unsigned long long int haszprzod[ 4 ]; unsigned long long int hasztyl[ 4 ]; unsigned long long int liczba[ 4 ]; unsigned long long int mnoz[] = { 5, 7, 26, 2137 }; unsigned long long int modulo[] = { 1000000007, 1000000009, 1000696969, 1000000933 }; int main() { int n; scanf( "%d ", &n ); char c = '0'; for( int i = 0; i < 4; ++i ) liczba[ i ] = 1; while( true ) { c = getchar_unlocked(); if( c == EOF ) break; if( c == 10 ) continue; for( int i = 0; i < 4; ++i ) { haszprzod[ i ] *= mnoz[ i ]; haszprzod[ i ] += c; haszprzod[ i ] %= modulo[ i ]; unsigned long long int a = liczba[ i ] * c; a %= modulo[ i ]; hasztyl[ i ] += a; hasztyl[ i ] %= modulo[ i ]; liczba[ i ] *= mnoz[ i ]; liczba[ i ] %= modulo[ i ]; } } for( int i = 0; i < 4; ++i ) { if( hasztyl[ i ] != haszprzod[ i ] ) { puts("NIE"); return 0; } } puts("TAK"); return 0; } |