ants.cpp
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#define MAXN 200000
using namespace std;
typedef struct ANT
{
int i;
char d;
ANT() {}
ANT(int i, char d): i(i), d(d) {}
bool operator < (const ANT& a) const {return i < a.i;}
}
ANT;
ANT Ant[MAXN];
int min(int a, int b)
{
return (a < b) ? a : b;
}
int max(int a, int b)
{
return (a > b) ? a : b;
}
int main()
{
char c;
int l, n;
while(scanf("%d%d", &l, &n) > 0)
{
for(int i = 0; i < n; i++)
{
scanf("%d%c%c", &(Ant[i].i), &c, &(Ant[i].d));
}
sort(Ant, Ant + n);
/*for(int i = 0; i < n; i++)
{
printf("%d %c\n", Ant[i].i, Ant[i].d);
}*/
int right = -1, left = -1, nRight = 0, nLeft = 0, rslRight = -1, rslLeft = -1;
for(int i = 0; i < n; i++)
{
if(right == -1)
{
if(Ant[i].d == 'R')
{
right = i;
}
}
else if(Ant[i].d == 'L')
{
nRight++;
}
}
for(int i = n - 1; i >= 0; i--)
{
if(left == -1)
{
if(Ant[i].d == 'L')
{
left = i;
}
}
else if(Ant[i].d == 'R')
{
nLeft++;
}
}
int rr = -1, ll = -1;
if(right != -1)
{
rr = l - Ant[right].i;
rslRight = right + nRight;
}
if(left != -1)
{
ll = Ant[left].i;
rslLeft = left - nLeft;
}
if(rr == ll)
{
printf("The last ant will fall down in %d seconds - started at %d and %d.\n", ll,
min(Ant[rslLeft].i, Ant[rslRight].i),
max(Ant[rslLeft].i, Ant[rslRight].i));
}
else
{
if(rr > ll)
{
ll = rr;
rslLeft = rslRight;
}
printf("The last ant will fall down in %d seconds - started at %d.\n", ll, Ant[rslLeft].i);
}
}
return 0;
}