#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; } |
English