#include #include #include using namespace std; int n; int messaggio[100000]; int n_mess[100000]; string makeString(int s, int e){ char p[1]; string st=""; for(int i = s; i <= e; i++){ sprintf(p,"%d",messaggio[i]); st = st + p; } return st; } bool confStr(string s){ bool found = false; if(s == "0") found = true; if(s == "00") found = true; if(s == "001") found = true; if(s == "010") found = true; if(s == "0010") found = true; if(s == "0100") found = true; if(s == "0110") found = true; return found; } void calcolaMessaggi(){ int lunghezza = 0, cont; string subs,ssubs; for(int i = (n - 1); i >= 0; i--){ lunghezza = n - i; cont = 0; subs = makeString(i,n-1); switch(lunghezza){ case(1): subs = makeString(i,n-1); if(confStr(subs)) cont = 1; break; case(2): subs = makeString(i,n-1); if(confStr(subs)) cont = 1; ssubs = makeString(i,i); if(confStr(ssubs) && (n_mess[i + 1] != 0)) cont = cont + n_mess[i + 1]; break; case(3): subs = makeString(i,n-1); if(confStr(subs)) cont = 1; for(int j = 0; j < 2; j++){ ssubs = makeString(i,i + j); if(confStr(ssubs) && (n_mess[i + j + 1] != 0)) cont = cont + n_mess[i + j + 1]; } break; case(4): subs = makeString(i, i+3); if(confStr(subs)) cont = 1; for(int j = 0; j < 3; j++){ ssubs = makeString(i,i + j); if(confStr(ssubs) && (n_mess[i + j + 1] != 0)) cont = cont + n_mess[i + j + 1]; } break; default: for(int j = 0; j <= 3; j++){ ssubs = makeString(i,i + j); if(confStr(ssubs) && (n_mess[i + j + 1] != 0)) cont = cont + n_mess[i + j + 1]; } break; } n_mess[i] = cont; } ofstream fout("output.txt"); fout << n_mess[0]%10; fout.close(); } int main() { ifstream fin("input.txt"); fin >> n; for(int i = 0; i < n; i++) fin >> messaggio[i]; fin.close(); calcolaMessaggi(); return 0; }