Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- #ifndef DEBUG
- #define DEBUG(...) printf(__VA_ARGS__)
- #endif
- #define MAXR 12
- #define MAXS 12
- #define PUNO 1000
- void cisti_matricu(char mat[][MAXS], int r, int s){
- for (int i = 0; i < r+2; i++){
- for (int j = 0; j < s+2; j++){
- mat[i][j]='.';
- }
- }
- }
- void prepisi_matricu_puno(char mat[][MAXS], char mat2[][MAXR][PUNO], int r, int s, int brojac_puno){
- for (int i = 0; i < r+2; ++i){
- for (int j = 0; j < s+2; ++j){
- mat2[i][j][brojac_puno]=mat[i][j];
- }
- }
- }
- /*void prepisi_matricu_zadnja(char mat[][MAXS], char mat2[][MAXR][PUNO], int r, int s, int brojac_puno){
- for (int i = 1; i < r+1; ++i){
- for (int j = 1; j < s+1; ++j){
- mat[i][j]=mat2[i][j][brojac_puno];
- }
- }
- }*/
- void prepisi_matricu(char mat[][MAXS], char mat2[][MAXS], int r, int s){
- for (int i = 1; i < r+1; ++i){
- for (int j = 1; j < s+1; ++j){
- mat[i][j]=mat2[i][j];
- }
- }
- }
- int provjera_neparni(char mat[][MAXS], int r, int s){
- int brojac=0;
- if (mat[r-1][s-1]=='#') brojac++;
- if (mat[r-1][s]=='#') brojac++;
- if (mat[r][s-1]=='#') brojac++;
- if (mat[r][s+1]=='#') brojac++;
- if (mat[r+1][s-1]=='#') brojac++;
- if (mat[r+1][s]=='#') brojac++;
- return brojac;
- }
- int provjera_parni(char mat[][MAXS], int r, int s){
- int brojac=0;
- if (mat[r-1][s]=='#') brojac++;
- if (mat[r-1][s+1]=='#') brojac++;
- if (mat[r][s-1]=='#') brojac++;
- if (mat[r][s+1]=='#') brojac++;
- if (mat[r+1][s]=='#') brojac++;
- if (mat[r+1][s+1]=='#') brojac++;
- return brojac;
- }
- long long int provjeri_duple(char mat[][MAXS], char mat2[][MAXR][PUNO], int r, int s, long long int brojac_puno){
- int triger=0;
- for (long long int k = 0; k < brojac_puno+1; ++k){
- for (int i = 1; i < r+1; ++i){
- for (int j = 1; j < s+1; ++j){
- if (mat[i][j]!=mat2[i][j][k]) triger++; //ako su poz_dupli, onda ce ostat 0
- }
- }
- if (!triger) return k; //poz_dupli su, vrati k!
- triger=0;
- }
- return 0;
- }
- void unos(char mat[][MAXS], int r, int s){
- for (int i = 1; i < r+1; ++i){
- for (int j = 1; j < s+1; ++j){
- scanf (" %c", &mat[i][j]);
- }
- }
- }
- void ispis(char mat[][MAXS], int r, int s){
- for (int i = 1; i < r+1; i++){
- for (int j = 1; j < s+1; j++){
- printf("%c", mat[i][j]);
- }
- printf ("\n");
- }
- }
- void ispis_tmp(char mat[][MAXS][PUNO], int r, int s, int ispisni_broj){
- for (int i=1; i<r+1; i++){
- for (int j=1; j<s+1; j++){
- printf ("%c", mat[i][j][ispisni_broj]);
- }
- printf ("\n");
- }
- }
- int main() {
- int s, r, prekini=0, ispis_tempa=0; //stupac, redak, brojac za izlaz
- long long int dan, dobiveni_broj, najnovji, poz_dupli=0, ispisni_broj; //dani 2 ≤ s,r ≤ 10, 1≤ dani ≤2^63−1
- char pocetno[MAXR][MAXS]; //pocetna matrica
- char tmp[MAXR][MAXS]; //privremena matrica, za upis nakon provjere
- char tmp_puno[MAXR][MAXS][PUNO]; //sve prijasnje matrice spremaju se u ovu za usporedbu
- scanf ("%d %d %lli", &r, &s, &dan);
- cisti_matricu(tmp, r, s);
- cisti_matricu(pocetno, r, s);
- unos(pocetno, r, s);
- //glavna for petlja
- for (long long int k=0; k<dan; k++){
- for (int i = 1; i < r+1; ++i){
- for (int j = 1; j < s+1; ++j){
- if (i%2!=0){ //za neparne redove
- if (provjera_neparni(pocetno, i, j)%2){
- tmp[i][j]='#';
- prekini++;
- }
- }
- if(i%2==0){ //za parne redove
- if (provjera_parni(pocetno, i, j)%2){
- tmp[i][j]='#';
- prekini++;
- }
- }
- }
- }
- prepisi_matricu_puno(pocetno, tmp_puno, r, s, k);
- prepisi_matricu(pocetno, tmp, r, s); //prepisi iz tmp sve u pocetnu
- poz_dupli=provjeri_duple(pocetno, tmp_puno, r, s, k);
- if (poz_dupli){
- dobiveni_broj=k-poz_dupli; //k iz for petlje - broj koji dobivamo iz provjere duplih
- najnovji=dan%dobiveni_broj;
- if (najnovji){
- ispisni_broj=k;
- }
- else ispisni_broj=dobiveni_broj;
- ispis_tempa++;
- prekini=0;
- }
- cisti_matricu(tmp, r, s); //ocisti tmp za sljedecu uporabu
- if (!prekini) break; //ako su u nekom slucaju sve sace prazne, odmah izadi iz petlje ili ako postoje identicne
- }
- if (!ispis_tempa) ispis(pocetno, r, s);
- else ispis_tmp(tmp_puno, r, s, ispisni_broj);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement