#include <stdio.h> #include <stdbool.h> void read_f(int n, int tab[]) { int c; int poz = 0; while ((c=getchar()) != EOF) { if (c != ' ') tab[poz++] = c - '0'; } } int pole(int w, int nk, int k) { return w*nk+k; } void zeruj(int tab[], int n){ for (int i = 0; i<n; i++) { tab[i] = 0; } } int indeks(int a) { if (a==17) return 0; if (a==18) return 1; if (a==19) return 2; } void licznik(int input[], int pot[], int in_n) { int runda = 0; int dyw = 1; while(dyw<in_n) { int p = pot[pole(indeks(input[dyw]), 5, input[runda]-1)]; pot[pole(indeks(input[dyw]), 5, input[runda]-1)] = p+1; runda += 2; dyw += 2; } } bool mozna(int pot[], int n) { int liczba = 0; for (int i = 0; i<n; i++) { if (((i+1)%5==0) && (pot[i]<2)) { return false; } else if (((i+1)%5==0) && (pot[i]>=2)) { liczba++; } else if (pot[i]>0) { liczba++; } } return (liczba==15); } void wynik(bool res) { if (res) printf("TAK"); else printf("NIE"); } int main(void){ int n; scanf("%d\n", &n); int tab[2*n]; int n2 = n*2; read_f(n2, tab); int dyw[15]; zeruj(dyw, 15); licznik(tab, dyw, n2); bool odp = mozna(dyw, 15); wynik(odp); 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 | #include <stdio.h> #include <stdbool.h> void read_f(int n, int tab[]) { int c; int poz = 0; while ((c=getchar()) != EOF) { if (c != ' ') tab[poz++] = c - '0'; } } int pole(int w, int nk, int k) { return w*nk+k; } void zeruj(int tab[], int n){ for (int i = 0; i<n; i++) { tab[i] = 0; } } int indeks(int a) { if (a==17) return 0; if (a==18) return 1; if (a==19) return 2; } void licznik(int input[], int pot[], int in_n) { int runda = 0; int dyw = 1; while(dyw<in_n) { int p = pot[pole(indeks(input[dyw]), 5, input[runda]-1)]; pot[pole(indeks(input[dyw]), 5, input[runda]-1)] = p+1; runda += 2; dyw += 2; } } bool mozna(int pot[], int n) { int liczba = 0; for (int i = 0; i<n; i++) { if (((i+1)%5==0) && (pot[i]<2)) { return false; } else if (((i+1)%5==0) && (pot[i]>=2)) { liczba++; } else if (pot[i]>0) { liczba++; } } return (liczba==15); } void wynik(bool res) { if (res) printf("TAK"); else printf("NIE"); } int main(void){ int n; scanf("%d\n", &n); int tab[2*n]; int n2 = n*2; read_f(n2, tab); int dyw[15]; zeruj(dyw, 15); licznik(tab, dyw, n2); bool odp = mozna(dyw, 15); wynik(odp); return 0; } |