【算法设计与分析】蚂蚁

【题目】



【输入输出】



【样例】



【源代码】

<span style="font-family:Microsoft YaHei;font-size:24px;">#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int maxn=10005;

struct ants
{
  int id ; //输入序号
  int pos ;  //在小木棍上的顺序
  int status ;  //状态

  bool operator <( const ants an) const//排序
  {
    return pos<an.pos;
  }
}begins[maxn],ends[maxn];

int order[maxn];

int main()
{
    int test;
    int T,L,n;
    char str;
    int a;
    scanf("%d",&test);//测试组数
    for(int k=1;k<=test;k++)
    {
         printf("Case #%d:\n",k);//输入第几组数据
            scanf("%d%d%d",&L,&T,&n);//木棍长度,爬行时间,共几只蚂蚁
    //       printf("L=%d T=%d n=%d\n",L,T,n);
         for(int j=0;j<n;j++)
         {
            scanf("%d %c",&a,&str);//输入第j只蚂蚁的状态
            int value=(str=='L')?-1:1;//如果蚂蚁的状态为左,返回-1,否则返回为1
            begins[j]=(ants){j,a,value};//第j只蚂蚁的初始状态
            ends[j]=(ants){j,a+T*value,value};//第j只蚂蚁的最后状态。不考虑蚂蚁调转的情况
     //      printf("begin[%d]=%d end[%d]=%d\n",k,begin[k],k,end[k]);
         }

         sort(begins,begins+n);//对蚂蚁进行排序

         for(int i=0;i<n;i++)//对蚂蚁的顺序进行排序,并且记录该蚂蚁的位置
            order[begins[i].id]=i;

         sort(ends,ends+n);//根据最后的状态进行排序

         for(int i=0;i<n-1;i++)
          if(ends[i].pos==ends[i+1].pos)//如果第i个蚂蚁的位置和第i+1个相同,那么两只蚂蚁的状态标记为0
            ends[i].status=ends[i+1].status=0;

         char chastr[][10]={"L","Turning","R"};//用一个数组存储状态值

           for(int i=0;i<n;i++)
            {
                int a=order[i];
                if(ends[a].pos<0||ends[a].pos>L)
                  printf("Fell off\n");
                else
                  printf("%d %s\n",ends[a].pos,chastr[ends[a].status+1]);
           }
           printf("\n");
    }
   return 0;
}


</span>

【简述】

来一组数据测试就会发现,出发前和出发后,每一个蚂蚁的相对位置都是不变的,然后 看代码的注释,很详细

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值