UVA1008 Piotr's Ants

来源:互联网 发布:实况足球2016捏脸数据 编辑:程序博客网 时间:2024/06/17 04:49

找规律,模拟。

强行模拟会超时。

观察易发现,蚂蚁位置相对不变,只改变对应序号而已,不过要注意按照输入蚂蚁的顺序输出相对应蚂蚁的结果。另,仔细看条件,这次的空白行是每个测试案例之后,而非测试案例中间。


#include <bits/stdc++.h>using namespace std;const int maxn=10003;struct ant{    int a;    int pre;    char state;}ant[maxn];bool cmp(struct ant a1,struct ant b1){    if(a1.a<b1.a)        return true;    return false;}bool cmp2(struct ant a2,struct ant b2){    if(a2.pre<b2.pre)        return true;    return false;}int main(){  int kase;  cin>>kase;  for(int ii=1;ii<=kase;ii++){    //if(ii!=1)    int shunxu[maxn];    int lon,time,n;    cin>>lon>>time>>n;    for(int i=0;i<n;i++){        cin>>ant[i].a>>ant[i].state;        ant[i].pre=i;    }    sort(ant,ant+n,cmp);    for(int i=0;i<n;i++){        shunxu[i]=ant[i].pre;    }    for(int i=0;i<n;i++){        if(ant[i].state=='L')            ant[i].a-=time;        else if(ant[i].state=='R')            ant[i].a+=time;    }    sort(ant,ant+n,cmp);    for(int i=0;i<n;i++){        ant[i].pre=shunxu[i];    }    printf("Case #%d:\n",ii);    sort(ant,ant+n,cmp2);    for(int i=0;i<n;i++){        for(int l=0;l<n;l++){            if(i!=l&&ant[i].a==ant[l].a)            {                ant[i].state='T';                ant[l].state='T';            }        }    }    for(int i=0;i<n;i++)    {        if(ant[i].a>lon||ant[i].a<0){            printf("Fell off\n");            continue;        }        if(ant[i].state!='T')            printf("%d %c\n",ant[i].a,ant[i].state);        else if(ant[i].state=='T')            printf("%d Turning\n",ant[i].a);    }     cout<<endl;    memset(shunxu,0,sizeof(shunxu));    memset(ant,0,sizeof(ant));  }}




0 0