【题目】
【输入输出】
【样例】
【源代码】
<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>
【简述】
来一组数据测试就会发现,出发前和出发后,每一个蚂蚁的相对位置都是不变的,然后 看代码的注释,很详细