记录编号 92814 评测结果 AAAAAAAAAA
题目名称 [UVa 10881] 蚂蚁 最终得分 100
用户昵称 Gravatarwolf 是否通过 通过
代码语言 C++ 运行时间 0.127 s
提交时间 2014-03-22 21:45:38 内存使用 0.32 MiB
显示代码纯文本
#include<iostream>
#include<vector>
#include<cstdio>
using namespace std;
////////////////////
FILE *open;
FILE *out;
vector<int> id;
vector<int> ooldd;
vector<int> turn;
//
vector<int> newd;
vector<int> end;
///////////////////
int turnc(char c){
		if(c==76)
		return -1;//L
	else
		return 1;//R
}

int next_id(int a,int L){
	for(int i=a+1;i!=L+1;++i){
		if(id[i]>0)
			return i;//返回下一个id的位置
	}
	return 0;
}
int next_dir(int a,int L){
	for(int i=a;i!=L+1;++i){
		if(turn[i]>0){
			--turn[i];
			return i;//返回下一个方向所在位置
		}
	}
	return L+1;
}
int main(){
	open=fopen("Ants.in","r");
	out=fopen("Ants.out","w");
	int e,t=0;
	fscanf(open,"%d",&e);
	while(t!=e){
		fprintf(out,"Case #%d:\n",t+1);
		int L,T,n;
		fscanf(open,"%d%d%d",&L,&T,&n);
		id.resize(L+1,0);
		ooldd.resize(L+1,0);
		turn.resize(L+1,0);
		newd.resize(n+1,0);
		end.resize(n+1,0);
		int lfell,rfell;
		lfell=0;
		rfell=0;
		///////////
		for(int i=0;i!=n;++i){
			int a,b,end;
			char c;
			fscanf(open,"%d %c",&a,&c);
			id[a]=i+1;
			b=turnc(c);//direction
			end=a+b*T;
			if(end<0){
				++lfell;
			}
			else if(end>L){
				++rfell;
			}
			else{
				ooldd[end]+=b;
				++turn[end];
			}
		}
		//第一次哈希完成
		///////////
		int x,y,i;
		x=-1;
		y=0;
		i=0;
		///////////第二次哈希准备完成
		for(;;){
			if(lfell>0){
				x=next_id(x,L);//id[x] is end in end[]
				newd[id[x]]=-2;
				end[id[x]]=-1;
				++i;
				--lfell;
			}else
				break;
		}
		for(;i!=n;++i){
			y=next_dir(y,L);
			if(y<L+1){
				x=next_id(x,L);//id[x] is end in end[]
				newd[id[x]]=ooldd[y];
				end[id[x]]=y;
			}
		}
		for(;;){
			if(rfell>0){
				x=next_id(x,L);//id[x] is end in end[]
				newd[id[x]]=-2;
				end[id[x]]=-1;
				--rfell;
			}
			else
				break;
		}
		///////////第二次哈希完成
		for(int i=1;i!=n+1;++i){
			if(newd[i]==-2){
				fprintf(out,"Fell off\n");
			}
			else if(newd[i]==0){
				fprintf(out,"%d Turning\n",end[i]);
			}
			else if(newd[i]==-1){
				fprintf(out,"%d L\n",end[i]);
			}else
				fprintf(out,"%d R\n",end[i]);
		}
		///////////
		id.clear();
		ooldd.clear();
		turn.clear();
		newd.clear();
		end.clear();
		++t;
	}
	return 0;
}
//designed by wolf