#include #include #include #include //a parte casi particolari effettua una ricerca completa using namespace std; const int MAX_N = 100000; int tot,n,vect[MAX_N]; void stampa() { ofstream fout("output.txt"); assert(fout); fout << tot; fout.close(); } void risolvi(int i) { if(i>n) {tot++; if(tot==10) tot=0; } else{ //if(vect[i]==1) //return ; if(vect[i]==0)//decido che è una a 0 risolvi(i+1); if(i<=n-1) if(vect[i]==0 && vect[i+1]==0)//la prendo come b 00 risolvi(i+2); if(i<=n-2) { if(vect[i]==0 && vect[i+1]==0 && vect[i+2]==1 )//la prendo come c 001 risolvi(i+3); if(vect[i]==0 && vect[i+1]==1 && vect[i+2]==0 )//la prendo come d 010 risolvi(i+3); } if(i<=n-3) { if(vect[i]==0 && vect[i+1]==0 && vect[i+2]==1 && vect[i+3]==0 )//la prendo come e 0010 risolvi(i+4); if(vect[i]==0 && vect[i+1]==1 && vect[i+2]==0 && vect[i+3]==0 )//la prendo come f 0100 risolvi(i+4); if(vect[i]==0 && vect[i+1]==1 && vect[i+2]==1 && vect[i+3]==0 )//la prendo come g 0110 risolvi(i+4); } } } int main() { ifstream fin("input.txt"); fin >> n ; //controllo veloce che non ci siano tre 1 consecutivi int conta=0; bool messaggio=true; for(int i=0;i>vect[i]; if(vect[i]==1) conta++; else conta=0; if(conta==3)//non è un messaggio messaggio=false; } tot=0; if(messaggio==true) { n--; //controllo veloce s finisce con 1 deve almeno avere due zeri che lo precedono if(vect[n]==1 && vect[n-2]!=0 && n>=2) stampa(); else { risolvi(0); //printf("\n %d",tot); stampa(); } } else stampa(); return 0; }