#include #include int mi_conviene(int n, int stomp[2][3], int matrix[2][n], int k){ int si=0, no=0, i, j; //printf("________________k:%d_________________\n",k); for(i = 0; i < 2; i++) for(j = k; j < k+3; j++) if (stomp[i][j-k] == 1){ if (matrix[i][j] == 1) si++; else no++; //printf("st[%d][%d]: %d; m[%d][%d]:%d; si:%d; no:%d\n",i, j-k, stomp[i][j-k] ,i, k, matrix[i][k], si, no); } return si>=no; } void esegui(FILE* fd, int n){ FILE* fout; int stomp[2][3], matrix[2][n], i, j, k, conta = 0, continua = 1; for (i = 0; i < 2; i++) //lettura stomp for (j = 0; j < 3; j++) fscanf(fd, "%d", &stomp[i][j]); for (i = 0; i < 2; i++) //lettura matrix for (j = 0; j < n; j++) fscanf(fd, "%d", &matrix[i][j]); while (continua){ continua = 0; for(k = 0; k < n-2; k++){ //controllo se vale la pena girare //if ( (stomp[0][0] == matrix[0][k]) && (stomp[1][0] == matrix[1][k]) ){ //se la prima colonna dello stomp รจ uguale alla colonna selazionata if ( mi_conviene(n, stomp, matrix, k)){ continua = 1; for(i = 0; i < 2; i++) //inverto la matrice for(j = k; j < k+3; j++){ //matrix[i][j] = (matrix[i][j] - stomp[i][j-k])*(matrix[i][j] - stomp[i][j-k]); //ma solo dove ho gli uno if (stomp[i][j-k] == 1){ if (matrix[i][j] == 0) matrix[i][j] = 1; else matrix[i][j] = 0; } } /*printf("k:%d\n", k); for (i = 0; i < 2; i++){ //lettura matrix for (j = 0; j < n; j++) printf("%d ", matrix[i][j]); printf("\n"); }*/ } } } for(i = 0; i < 2; i++) for(j = 0; j < n; j++) conta+= matrix[i][j]; fout = fopen("output.txt", "w"); fprintf(fout, "%d\n", conta); } int main(){ FILE* fd; int n=0; fd = fopen("input.txt","r"); if (fd == NULL){ printf("Errore nella lettura del file"); return 1; } fscanf(fd, "%d", &n); //printf("n:%d\n", n); esegui(fd, n); return 0; }