坠落的蚂蚁

题目描述

一根长度为1米的木棒上有若干只蚂蚁在爬动。它们的速度为每秒一厘米或静止不动,方向只有两种,向左或者向右。如果两只蚂蚁碰头,则它们立即交换速度并继续爬动。三只蚂蚁碰头,则两边的蚂蚁交换速度,中间的蚂蚁仍然静止。如果它们爬到了木棒的边缘(0或100厘米处)则会从木棒上坠落下去。在某一时刻蚂蚁的位置各不相同且均在整数厘米处(即1,2,3,…99厘米),有且只有一只蚂蚁A速度为0,其他蚂蚁均在向左或向右爬动。给出该时刻木棒上的所有蚂蚁位置和初始速度,找出蚂蚁A从此时刻到坠落所需要的时间。

输入

第一行包含一个整数表示蚂蚁的个数N(2<=N<=99),之后共有N行,每一行描述一只蚂蚁的初始状态。每个初始状态由两个整数组成,中间用空格隔开,第一个数字表示初始位置厘米数P(1<=P<=99),第二个数字表示初始方向,-1表示向左,1表示向右,0表示静止。

输出

蚂蚁A从开始到坠落的时间。若不会坠落,输出“Cannot fall!”

样例输入

2
44 0
41 1
2
13 0
63 1
4
56 0
64 -1
85 -1
47 1

样例输出

59
Cannot fall!
85
#include <bits/stdc++.h>
using namespace std;
struct haha{
    int a;
    int c;
}we[110];
int b[100];
bool cmp(haha a,haha b){
    return a.a<b.a;
}
int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        int f=0,x1=0,x2=0,d;
        memset(b,0,sizeof(b));
        for(int i=0;i<n;i++){
            scanf("%d %d",&we[i].a,&we[i].c);
        }
        sort(we,we+n,cmp);
        for(int i=0;i<n;i++){
            if(we[i].c==0){
                f=1;
                d=i;
            }
            else if(f==0){
                if(we[i].c>0){
                    //printf("%d*\n",i);
                    x1++;
                    b[i]=1;
                }
            }
            else if(f==1){
                if(we[i].c<0){
                    x2++;
                    b[i]=1;
                }
            }
        }
        //printf("%d*%d\n",x1,x2);
        if(x1==x2){
            printf("Cannot fall!\n");
        }
        else{
            if(x1>x2){
                int s=x2+1;
                //printf("%d*%d\n",s,d);
                for(int i=d;i>=0;i--){
                //  printf("gg%d*%d\n",s,b[i]);
                    if(b[i]==1 && s!=0){
                        s--;
                    }
                    if(s==0 && b[i]==1){
                        printf("%d\n",100-we[i].a);
                        break;
                    }
                }
            }
            else{
                int s=x1+1;
                for(int i=d;i<=100;i++){
                    if(b[i]==1 && s!=0){
                        s--;
                    }
                    if(s==0 && b[i]){
                        printf("%d\n",we[i].a);
                        break;
                    }
                }
            }
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/doublekillyeye/article/details/81911421