// // main.cpp // pal // // Created by Apple on 13/12/2018. // Copyright © 2018 Example. All rights reserved. // #include <cstdio> //bool A[1300007]; // początek koniec //std::pair<unsigned long long, std::pair<unsigned long long, unsigned long long> > hasze[4]; unsigned long long hasze[4][3]; unsigned long long liczbypier[4]={776531419,776531471,776531479,776531537}; int main(int argc, const char * argv[]) { int i; scanf("%d",&i); bool czypalindrom=true; unsigned long long cval; char c; for(i=0;i<4;i++) { liczbypier[i]*=liczbypier[i]; } for (i=0; i<4; i++) { hasze[i][2]=1; } scanf(" %c",&c); while(c>='a' && c<='z') { cval=c-'a'; for (i=0; i<4; i++) { hasze[i][0]=(hasze[i][0]*26+cval)%liczbypier[i]; hasze[i][1]=(hasze[i][1]+(hasze[i][2]*cval)%liczbypier[i])%liczbypier[i]; hasze[i][2]=(hasze[i][2]*26)%liczbypier[i]; } scanf("%c",&c); } for (i=0; i<4; i++) { if(hasze[i][0]!=hasze[i][1]) { czypalindrom=false; } } if (czypalindrom) { printf("TAK\n"); } else { printf("NIE\n"); } 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 102 | // // main.cpp // pal // // Created by Apple on 13/12/2018. // Copyright © 2018 Example. All rights reserved. // #include <cstdio> //bool A[1300007]; // początek koniec //std::pair<unsigned long long, std::pair<unsigned long long, unsigned long long> > hasze[4]; unsigned long long hasze[4][3]; unsigned long long liczbypier[4]={776531419,776531471,776531479,776531537}; int main(int argc, const char * argv[]) { int i; scanf("%d",&i); bool czypalindrom=true; unsigned long long cval; char c; for(i=0;i<4;i++) { liczbypier[i]*=liczbypier[i]; } for (i=0; i<4; i++) { hasze[i][2]=1; } scanf(" %c",&c); while(c>='a' && c<='z') { cval=c-'a'; for (i=0; i<4; i++) { hasze[i][0]=(hasze[i][0]*26+cval)%liczbypier[i]; hasze[i][1]=(hasze[i][1]+(hasze[i][2]*cval)%liczbypier[i])%liczbypier[i]; hasze[i][2]=(hasze[i][2]*26)%liczbypier[i]; } scanf("%c",&c); } for (i=0; i<4; i++) { if(hasze[i][0]!=hasze[i][1]) { czypalindrom=false; } } if (czypalindrom) { printf("TAK\n"); } else { printf("NIE\n"); } return 0; } |