ants

来源:互联网 发布:python数据挖掘 pdf 编辑:程序博客网 时间:2024/04/30 14:19
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int maxn=10005;struct Ant{    int id,p,d;   //d表示朝向,-1表示左,0表示碰撞中,1表示右。    bool operator < (const Ant& S)const    {        return p<S.p;    }} before[maxn],after[maxn];const char dirname[][10]={"L","Turning","R"};int  order[maxn];int main(){    int  K,cas=0;//cas=1    cin >> K;    while(K--)    {        int L,T,n;        printf("Case #%d\n:",++cas);//cas++        scanf("%d%d%d",&L, &T, &n);        for(int i=0; i<n; i++)        {            int p,d;            char c;            scanf("%d %c",&p,&c);            d=(c=='L'?-1:1);            before[i]=(Ant){i,p,d};            after[i]=(Ant){0,p+T*d,d};  //所以的蚂蚁相撞后可以看做对穿而过        }        sort(before,before+n);        for(int i=0; i<n; i++)  //最巧妙的地方在这里,第一次从左到右所有的蚂蚁的相对位置没有变化            order[before[i].id]=i;        sort(after,after+n);        for(int i=0; i<n-1; i++)            if(after[i].p==after[i+1].p)  after[i].d=after[i+1].d=0;        for(int i=0; i<n; i++)        {            int a=order[i];            if(after[a].p>=0&&after[a].p<=L)            {                printf("%d %s\n",after[a].p,dirname[after[a].d+1]);            }            else                printf("Fell off\n");        }        puts("");    }    return 0;}
0 0
原创粉丝点击