#include <iostream> #include <string> using namespace std; void merge(int start, int middle, int end, char tab[], char t[]){ int i = start; int j = middle + 1; int k = i; for(int p = start; p <= end; p++){ t[p] = tab[p]; } while(i <= middle && j <= end){ if(t[i] >= t[j]){ tab[k] = t[i]; i++; }else{ tab[k] = t[j]; j++; } k++; } while(i <= middle){ tab[k] = t[i]; i++; k++; } } void mergesort(int start, int end, char tab[], char t[]){ int middle; if(start != end){ middle = (start + end) / 2; mergesort(start, middle, tab, t); mergesort(middle + 1, end, tab, t); merge(start, middle, end, tab, t); } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; string zab1, zab2; cin >> zab1 >> zab2; char tab1[n]; char tab2[n]; for(int i = 0; i < n; i++){ tab1[i] = zab1[i]; tab2[i] = zab2[i]; } char t1[n]; char t2[n]; mergesort(0, n-1, tab1, t1); mergesort(0, n-1, tab2, t2); int czyDziala = 0; for(int i = 0; i < n; i++){ if(tab1[i] != tab2[i]){ czyDziala = 1; break; } } int wynik = 0; if(czyDziala == 0){ int i = 0; for(int i = 0; i < n; i++){ int j = 0; while(j < n){ if(zab1[i] == zab2[j] && (j - i)%2 == 0){ wynik = wynik + 1; zab2[j] = '0'; break; } j++; } } } if(wynik == n) cout << "TAK"; else cout << "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 | #include <iostream> #include <string> using namespace std; void merge(int start, int middle, int end, char tab[], char t[]){ int i = start; int j = middle + 1; int k = i; for(int p = start; p <= end; p++){ t[p] = tab[p]; } while(i <= middle && j <= end){ if(t[i] >= t[j]){ tab[k] = t[i]; i++; }else{ tab[k] = t[j]; j++; } k++; } while(i <= middle){ tab[k] = t[i]; i++; k++; } } void mergesort(int start, int end, char tab[], char t[]){ int middle; if(start != end){ middle = (start + end) / 2; mergesort(start, middle, tab, t); mergesort(middle + 1, end, tab, t); merge(start, middle, end, tab, t); } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; string zab1, zab2; cin >> zab1 >> zab2; char tab1[n]; char tab2[n]; for(int i = 0; i < n; i++){ tab1[i] = zab1[i]; tab2[i] = zab2[i]; } char t1[n]; char t2[n]; mergesort(0, n-1, tab1, t1); mergesort(0, n-1, tab2, t2); int czyDziala = 0; for(int i = 0; i < n; i++){ if(tab1[i] != tab2[i]){ czyDziala = 1; break; } } int wynik = 0; if(czyDziala == 0){ int i = 0; for(int i = 0; i < n; i++){ int j = 0; while(j < n){ if(zab1[i] == zab2[j] && (j - i)%2 == 0){ wynik = wynik + 1; zab2[j] = '0'; break; } j++; } } } if(wynik == n) cout << "TAK"; else cout << "NIE"; return 0; } |