Uva 10881 蚂蚁

//Uva 10881 
#include <iostream>
#include <algorithm>
#include <cstdio>
#define N 10005
using namespace std;
struct ant
{
	int id,x;
	int z;//-1向左,0碰撞中,1向右 
	bool operator <(const ant &a) const
	{
		return x<a.x;
	}
}begin[N],end[N];
int temp[N];//第i只蚂蚁的最终状态在temp[i]中 
char ss[][10]={"L","Turning","R"};
int main()
{
	int t,i,j,L,T,n,Case=1;
	cin>>t;
	while(t--)
	{	char s; int x,z;
		scanf("%d%d%d",&L,&T,&n);
		cout<<"Case #"<<Case++<<":"<<endl;
		for(i=0;i<n;i++)
		{
			scanf("%d %c",&x,&s);
			z=(s=='L'?-1:1);
			begin[i].id=i; begin[i].x=x;
		    end[i].z=begin[i].z=z;
			end[i].x=x+T*z;	
		}
		sort(begin,begin+n); 
		for(i=0;i<n;i++)
			temp[begin[i].id]=i; //记下输入的顺序 
		sort(end,end+n);
		for(i=0;i<n-1;i++) //终态是否正在碰撞
			if(end[i].x==end[i+1].x) end[i].z=end[i+1].z=0;
		for(i=0;i<n;i++)
		{
			if(end[temp[i]].x<0||end[temp[i]].x>L) printf("Fell off\n");
			else printf("%d %s\n",end[temp[i]].x,ss[end[temp[i]].z+1]); //还原顺序在输出 
		}
		cout<<endl;
	}
	return 0;
}

你可能感兴趣的:(Uva 10881 蚂蚁)