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; 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*/ 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; 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; } } pomr = -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.s933.cteam111.ants.c.0.ants.c +++ c4.s987.cteam111.ants.c.0.ants.c @@ -22,9 +22,10 @@ int main(){ - int l, a, apom, i, best1, best2; + int l, a, apom, i, j, best1, best2; char dir; int pos; int *arr; int *arr2; + int arrpos[100000]; int pomr; int pomc1, pomc2; @@ -49,9 +50,11 @@ else arr[pos] = 2; + arrpos[a-apom] = pos; apom--; } /*pole pripraveno na vypocet*/ /*nejdrive zleva*/ - for(i=0;i < l; i++){ + for(j=0;j < a; j++){ + i = arrpos[j]; if(arr[i] == 2){ best1 = l-i; @@ -64,5 +67,6 @@ /*jeste zprava*/ - for(i=l-1;i >= 0; i--){ + for(j=a-1;j >= 0; j--){ + i = arrpos[j]; if(arr[i] == 1){ best2 = i; @@ -78,5 +82,6 @@ while(prohozeno == 1){ prohozeno = 0; - for(i=0;i < l; i++){ + for(j=0;j < a; j++){ + i = arrpos[j]; if(arr[i] == 2) pomr = i;