ants.c
#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, best1, best2;
char dir;
int pos;
int *arr;
int *arr2;
int pomr;
int pomc1, pomc2;
int prohozeno, li1, li2, tmp;
while(scanf("%d %d\n", &l
, &a
) == 2){
apom = a;
best1 = -1;
best2 = -1;
li1 = -1;
li2 = -1;
pomc1 = -1;
pomc2 = -1;
arr
= (int *)malloc(sizeof(int)*l
); arr2
= (int *)malloc(sizeof(int)*l
); memset(arr
, 0, sizeof(int)*l
); memset(arr2
, 0, sizeof(int)*l
); while(apom > 0){
scanf("%d %c\n", &pos
, &dir
); if(dir == 'L')
arr[pos] = 1;
else
arr[pos] = 2;
apom--;
}
/*pole pripraveno na vypocet*/
/*nejdrive zleva*/
for(i=0;i < l; i++){
if(arr[i] == 2){
best1 = l-i;
li1 = i;
pomc1 = l-i;
break;
}
}
/*jeste zprava*/
for(i=l-1;i >= 0; i--){
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(i=0;i < l; i++){
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;
}