#include <iostream> #include <stdio.h> using namespace std; int n; long primes[26][4] = { { 31687, 31699, 31721, 31723 }, { 31727, 31729, 31741, 31751 }, { 31769, 31771, 31793, 31799 }, { 31817, 31847, 31849, 31859 }, { 31873, 31883, 31891, 31907 }, { 31957, 31963, 31973, 31981 }, { 31991, 32003, 32009, 32027 }, { 32029, 32051, 32057, 32059 }, { 32063, 32069, 32077, 32083 }, { 32089, 32099, 32117, 32119 }, { 32141, 32143, 32159, 32173 }, { 32183, 32189, 32191, 32203 }, { 32213, 32233, 32237, 32251 }, { 32257, 32261, 32297, 32299 }, { 32303, 32309, 32321, 32323 }, { 32327, 32341, 32353, 32359 }, { 32363, 32369, 32371, 32377 }, { 32381, 32401, 32411, 32413 }, { 32423, 32429, 32441, 32443 }, { 32467, 32479, 32491, 32497 }, { 32503, 32507, 32531, 32533 }, { 32537, 32561, 32563, 32569 }, { 32573, 32579, 32587, 32603 }, { 32609, 32611, 32621, 32633 }, { 32647, 32653, 32687, 32693 }, { 32707, 32713, 32717, 32719 }, }; long bigPrime = 32749; long* leftMatrix; long* rightMatrix; long* resultMatrix; void multiply() { long r0 = leftMatrix[0] * rightMatrix[0] + leftMatrix[1] * rightMatrix[2]; long r1 = leftMatrix[0] * rightMatrix[1] + leftMatrix[1] * rightMatrix[3]; long r2 = leftMatrix[2] * rightMatrix[0] + leftMatrix[3] * rightMatrix[2]; long r3 = leftMatrix[2] * rightMatrix[1] + leftMatrix[3] * rightMatrix[3]; resultMatrix[0] = r0 % bigPrime; resultMatrix[1] = r1 % bigPrime; resultMatrix[2] = r2 % bigPrime; resultMatrix[3] = r3 % bigPrime; } bool isLetter(int symbol) { return symbol >= 'a'; } int main() { int symbol; while (!isLetter(symbol = getchar())) {} long forward[4]; long backward[4]; for (int i = 0; i < 4; i++) { forward[i] = primes[symbol - 'a'][i]; backward[i] = primes[symbol - 'a'][i]; } for (symbol = getchar(); isLetter(symbol); symbol = getchar()) { leftMatrix = forward; rightMatrix = primes[symbol - 'a']; resultMatrix = forward; multiply(); rightMatrix = backward; leftMatrix = primes[symbol - 'a']; resultMatrix = backward; multiply(); } if (forward[0] == backward[0] && forward[1] == backward[1] && forward[2] == backward[2] && forward[3] == backward[3]) { printf("TAK"); } else { printf("NIE"); } 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 | #include <iostream> #include <stdio.h> using namespace std; int n; long primes[26][4] = { { 31687, 31699, 31721, 31723 }, { 31727, 31729, 31741, 31751 }, { 31769, 31771, 31793, 31799 }, { 31817, 31847, 31849, 31859 }, { 31873, 31883, 31891, 31907 }, { 31957, 31963, 31973, 31981 }, { 31991, 32003, 32009, 32027 }, { 32029, 32051, 32057, 32059 }, { 32063, 32069, 32077, 32083 }, { 32089, 32099, 32117, 32119 }, { 32141, 32143, 32159, 32173 }, { 32183, 32189, 32191, 32203 }, { 32213, 32233, 32237, 32251 }, { 32257, 32261, 32297, 32299 }, { 32303, 32309, 32321, 32323 }, { 32327, 32341, 32353, 32359 }, { 32363, 32369, 32371, 32377 }, { 32381, 32401, 32411, 32413 }, { 32423, 32429, 32441, 32443 }, { 32467, 32479, 32491, 32497 }, { 32503, 32507, 32531, 32533 }, { 32537, 32561, 32563, 32569 }, { 32573, 32579, 32587, 32603 }, { 32609, 32611, 32621, 32633 }, { 32647, 32653, 32687, 32693 }, { 32707, 32713, 32717, 32719 }, }; long bigPrime = 32749; long* leftMatrix; long* rightMatrix; long* resultMatrix; void multiply() { long r0 = leftMatrix[0] * rightMatrix[0] + leftMatrix[1] * rightMatrix[2]; long r1 = leftMatrix[0] * rightMatrix[1] + leftMatrix[1] * rightMatrix[3]; long r2 = leftMatrix[2] * rightMatrix[0] + leftMatrix[3] * rightMatrix[2]; long r3 = leftMatrix[2] * rightMatrix[1] + leftMatrix[3] * rightMatrix[3]; resultMatrix[0] = r0 % bigPrime; resultMatrix[1] = r1 % bigPrime; resultMatrix[2] = r2 % bigPrime; resultMatrix[3] = r3 % bigPrime; } bool isLetter(int symbol) { return symbol >= 'a'; } int main() { int symbol; while (!isLetter(symbol = getchar())) {} long forward[4]; long backward[4]; for (int i = 0; i < 4; i++) { forward[i] = primes[symbol - 'a'][i]; backward[i] = primes[symbol - 'a'][i]; } for (symbol = getchar(); isLetter(symbol); symbol = getchar()) { leftMatrix = forward; rightMatrix = primes[symbol - 'a']; resultMatrix = forward; multiply(); rightMatrix = backward; leftMatrix = primes[symbol - 'a']; resultMatrix = backward; multiply(); } if (forward[0] == backward[0] && forward[1] == backward[1] && forward[2] == backward[2] && forward[3] == backward[3]) { printf("TAK"); } else { printf("NIE"); } return 0; } |