您的位置:首页 > 其它

UVA 10881

2013-09-17 19:58 134 查看

题意:一条长L厘米的木棒,上有N只蚂蚁,有的向左爬,有的向右爬,速度为1厘米/秒。如果向碰撞了就往返方向爬,左为L,右为R。求T秒后每只蚂蚁的位置。

题解:先排序,把蚂蚁的位置记录下来。如果蚂蚁相撞了,就当作两只蚂蚁直接穿过。排序后直接加上T,因为排序后的蚂蚁编号已经固定了,不过怎样爬动,都是在木棒上的第i只。

//#define YE
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

struct node
{
int num;
int s;
char c[2];
}m[10005];

int state[10005];

bool cmp(node a,node b)
{
if(a.s<b.s)
return 1;
return 0;
}

int main()
{
#ifdef YE
freopen("123","r",stdin);
#endif
int n;
while(scanf("%d",&n)!=EOF)
{
int j=1;
while(n--)
{
int a,L,T;
int i;
scanf("%d%d%d",&L,&T,&a);
for(i=0;i<a;i++)
{
scanf("%d %s",&m[i].s,m[i].c);
m[i].num=i;
}
printf("Case #%d:\n",j++);
sort(m,m+a,cmp);
for(i=0;i<a;i++)
{
if(m[i].c[0]=='R')
m[i].s+=T;
else
m[i].s-=T;
state[m[i].num]=i;
}
sort(m,m+a,cmp);
for(i=0;i<a;i++)
{
if(m[i].s==m[i+1].s)
{
m[i].c[0]='E';
m[i+1].c[0]='E';
}
}
for(i=0;i<a;i++)
{
int nu=state[i];
if(m[nu].s>L||m[nu].s<0)
{
printf("Fell off\n");
}
else if(m[nu].c[0]=='E')
{
printf("%d Turning\n",m[nu].s);
}
else
{
printf("%d %c\n",m[nu].s,m[nu].c[0]);
}
}
printf("\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uva