您的位置:首页 > 其它

【算法设计与分析】蚂蚁

2016-06-30 17:03 429 查看
【题目】



【输入输出】



【样例】



【源代码】

<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>

【简述】

来一组数据测试就会发现,出发前和出发后,每一个蚂蚁的相对位置都是不变的,然后 看代码的注释,很详细
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法