/* Author: MARCO CARLETTI Id: id369018 IDEA: - si effettua una fase preliminare in cui si azzerano nel buffer i settori che sono identici a stomp; - si contano gli 1 rimasti; - si calcola una prima soluzione basandosi sulla prima riga di stomp; - si fa nuovamente il conto ma rispetto alla seconda; - si confrontano le 3 soluzioni e si sceglie la migliore; */ #include #include #include using namespace std; #define N_MAX 1000000 int N; int stomp[2][3]; int buffer[2][N_MAX]; // buffer di lavoro int tmp[2][N_MAX]; // buffer in input int SOL = 0; int conta() { int res = 0; for(int i=0; i<2; i++) for(int j=0; j sum) { inverti(0,i); inverti(1,i); } } else if(buffer[line][i] == 1) { inverti(line,i); if(line == 0) inverti(1,i); else inverti(0,i); searchSolution(line, i+1); } else searchSolution(line, i+1); } int main() { // dati: N, STOMP, BUFFER // soluzione: SOL // input ifstream fin("input.txt"); fin >> N; for(int i=0; i<2; i++) for(int j=0; j<3; j++) fin >> stomp[i][j]; for(int i=0; i<2; i++) for(int j=0; j> tmp[i][j]; } fin.close(); // fase preliminare: elimino gli stomp uguali dal buffer cercaStomps(0); // inizializzo il buffer di lavoro for(int i=0; i<2; i++) for(int j=0; j sol0 || sol_noStom > sol1) if(sol0 < sol1) SOL = sol0; else SOL = sol1; else SOL = sol_noStom; // output ofstream fout("output.txt"); fout << SOL << endl; fout.close(); return 0; }