http://ac.jobdu.com/problem.php?pid=1159
#include <stdio.h>
#include <algorithm>
typedef struct ant{
int pos,dir;
bool friend operator < (struct ant a, struct ant b){
return a.pos < b.pos;
}
}Ant;
int main(){
//freopen("in/1159.in","r",stdin);
Ant ants[100];
int p,dir,n,Apos = 50;
while(scanf("%d",&n) !=EOF ){
for (int i = 0; i < n; ++i) {
scanf("%d %d",&p,&dir);
ants[i].pos = p,ants[i].dir = dir;
}
std::sort(ants,ants+n);
for (int i = 0; i < n; ++i) {
if(ants[i].dir == 0) Apos = i;
}
int i = Apos-1, j = Apos+1;
//find the first right-directed on left side
while(ants[i].dir == -1) i--;
//find the first left-directed on right side
while(ants[j].dir == 1) j++;
while(i>=0 && j<=n-1){
i--;j++;
while(ants[i].dir == -1) i--;
while(ants[j].dir == 1) j++;
}
if(i<0&&j>n-1) printf("Cannot fall!\n");
else if(i<0) printf("%d\n",ants[j].pos);
else printf("%d\n",100-ants[i].pos);
}
}