#include #include int posledni[6]; int vnejsi = 1; // 1 - OK, 0 - boom int kontrola(int index){ int predchozi_ve_stejnem_smeru = index - 2 + 6; // po modulení stejně jako -2 predchozi_ve_stejnem_smeru %= 6; if(vnejsi){ if(posledni[predchozi_ve_stejnem_smeru] < posledni[index]){ return 1; }else{ vnejsi = 0; int pred_predchozim_ve_stejnem_smeru = index - 4 + 6; // po modulení stejně jako -4 pred_predchozim_ve_stejnem_smeru %= 6; if(posledni[predchozi_ve_stejnem_smeru] - posledni[index] <= posledni[pred_predchozim_ve_stejnem_smeru]){ /* situace vypadá nějak takto * * +----+ <-+ * | | toto je prostor pro vnitřní spirálu * | X->-+ <-+ * | | * +------+ */ int index_v_druhem_smeru = index + 5; // po modulení +5 stejně jako -1 int predchozi_v_druhem_smeru = predchozi_ve_stejnem_smeru + 5; // po modulení +5 stejně jako -1 index--; predchozi_v_druhem_smeru %= 6; index_v_druhem_smeru %= 6; posledni[index_v_druhem_smeru] = posledni[index_v_druhem_smeru] - posledni[predchozi_v_druhem_smeru]; }else{ /* situace vypadá nějak takto * * +----+ <-+ * | | * | X->-+ | toto je prostor pro vnitřní spirálu * | | | * +------------+ <-+ * * tu vzdálenost mám uloženou v posledni[index_v_druhem_smeru], tedy * nemusím nic prepočítávat */ } return 1; } }else{ if(posledni[predchozi_ve_stejnem_smeru] > posledni[index]){ return 1; }else{ return 0; } } } int main() { int M; scanf(" %d", &M); int kroku = 0; int index = 0; for(int i = 0; i < 6; i++){ posledni[i] = 0; } for(int i = 0; i < M; i++){ scanf(" %d", &posledni[index]); if(kontrola(index)){ kroku++; }else{ // boom, vypíši kolik kroků jsem doteď ujel a skončím printf("%d\n",kroku); return 0; } index++; index %= 6; } // dojel jsem až na konec kroku = 0; printf("%d\n", kroku); return 0; }