Go to diff to previous submission
#include <stdio.h> #include <stdlib.h> #include <string.h> int maximum(int a, int b){ if(a > b){ return 1; } else if(b > a){ return 2; } else{ return 0; } } int maxi(int a, int b){ if(a > b) return a; return b; } int main(){ int l, a, apom, i, j, best1, best2; char dir; int pos; int *arr; int *arr2; int arrpos[100000]; int pomr; int pomc1, pomc2; int prohozeno, li1, li2, tmp; int prvni, pocindex, end, endindex; apom = a; best1 = -1; best2 = -1; li1 = -1; li2 = -1; pomc1 = -1; pomc2 = -1; while(apom > 0){ if(dir == 'L') arr[pos] = 1; else arr[pos] = 2; arrpos[a-apom] = pos; apom--; } /*pole pripraveno na vypocet*/ /*nejdrive zleva*/ for(j=0;j < a; j++){ i = arrpos[j]; if(arr[i] == 2){ best1 = l-i; li1 = i; pomc1 = l-i; break; } } /*jeste zprava*/ for(j=a-1;j >= 0; j--){ i = arrpos[j]; if(arr[i] == 1){ best2 = i; li2 = i; pomc2 = i; break; } } pomr = -1; prohozeno = 1; /*simulace indexu*/ prvni = 1; pocindex = 0; endindex = a-1; if(li1 >= 0 && li2 >= 0){ while(prohozeno == 1){ prohozeno = 0; for(j=0;j < a; j++){ i = arrpos[j]; if(arr[i] == 2){ pomr = i; if(prvni == 1){ pocindex = j; prvni = 0; } } else if(arr[i] == 1 && pomr != -1){ arr[pomr] = 1; arr[i] = 2; prohozeno = 1; li1 = i; li2 = pomr; arr2[i] = arr2[i] + 1; arr2[pomr] = arr2[pomr] + 1; pomr = -1; endindex = pocindex; } } pomr = -1; prvni = 1; } } if(li1 >= 0){ /*neotocil se*/ if(arr2[li1]%2 == 0){ if(arr[li1] == 1) arr[li1] = 2; else arr[li1] = 1; } if(arr2[li1] == 2) pomc1 = l-i; else pomc1 = i; } if(li2 >= 0){ /*neotocil se*/ if(arr2[li2]%2 == 0){ if(arr[li2] == 1) arr[li2] = 2; else arr[li2] = 1; } if(arr2[li2] == 2) pomc2 = l-i; else pomc2 = i; } if(pomc1 == pomc2 && pomc1 != -1){ if(li2 < li1){ tmp = li1; li1 = li2; li2 = tmp; } printf("The last ant will fall down in %d seconds - started at %d and %d.\n", maxi(best1, best2), li1, li2); } else printf("The last ant will fall down in %d seconds - started at %d.\n", maxi(best1, best2), maxi(li1, li2)); } return 0; }
--- c4.s987.cteam111.ants.c.0.ants.c +++ c4.s1054.cteam111.ants.c.0.ants.c @@ -31,4 +31,5 @@ int pomc1, pomc2; int prohozeno, li1, li2, tmp; + int prvni, pocindex, end, endindex; while(scanf("%d %d\n", &l, &a) == 2){ @@ -79,4 +80,7 @@ prohozeno = 1; /*simulace indexu*/ + prvni = 1; + pocindex = 0; + endindex = a-1; if(li1 >= 0 && li2 >= 0){ while(prohozeno == 1){ @@ -84,6 +88,11 @@ for(j=0;j < a; j++){ i = arrpos[j]; - if(arr[i] == 2) + if(arr[i] == 2){ pomr = i; + if(prvni == 1){ + pocindex = j; + prvni = 0; + } + } else if(arr[i] == 1 && pomr != -1){ arr[pomr] = 1; @@ -95,7 +104,9 @@ arr2[pomr] = arr2[pomr] + 1; pomr = -1; + endindex = pocindex; } } pomr = -1; + prvni = 1; } }