Uva Oj 10881 - Piotr's Ants

本文介绍了一个基于蚂蚁移动模拟的问题解决思路,通过保持蚂蚁排序不变来简化问题,并使用C语言实现了解决方案。代码中包含了结构体定义、排序函数及主要逻辑处理。
不得不说,蚂蚁排序不变这一点确实很给力

而不蚂蚁移动之后根据排序不变确实pl

其余的都好说了

#include<stdio.h>
#include<stdlib.h>
struct Ant{int x;int w;int num;}ant[10010],end[10010];
int l,t,n;
int swap[10010];
int cmp(const void *a,const void *b){
	Ant* p=(Ant *)a;
	Ant* q=(Ant *)b;
	return (*p).x-(*q).x;
	}
int gei(Ant a){
	printf("x:%d w:%d num:%d\n",a.x,a.w,a.num);
	}
int main(){
	int k,z;
	scanf("%d",&z);
	for(k=1;k<=z;k++){
		int i;
		scanf("%d%d%d%*c",&l,&t,&n);
		for(i=1;i<=n;i++){
			char s[1010];
			gets(s);
			char w;
			int x;
			sscanf(s,"%d %c",&x,&w);
			ant[i].x=x;
			ant[i].w=(w=='L')?-1:1;
			ant[i].num=i;
			end[i].x=x+t*ant[i].w;
			end[i].w=ant[i].w;
			end[i].num=i;
			}
			
	//	for(i=1;i<=n;i++)gei(ant[i]);
	//	for(i=1;i<=n;i++)gei(end[i]);printf("\n");
		
		qsort(&ant[1],n,sizeof(Ant),cmp);
		qsort(&end[1],n,sizeof(Ant),cmp);
		
	//	for(i=1;i<=n;i++)gei(ant[i]);
	//	for(i=1;i<=n;i++)gei(end[i]);printf("\n");
		
		for(i=1;i<=n;i++)swap[ ant[i].num ]=i;
		for(i=1;i<n;i++)if(end[i].x==end[i+1].x){
			end[i].w=0;
			end[i+1].w=0;
			}
		printf("Case #%d:\n",k);
		for(i=1;i<=n;i++){
			Ant &h=end[swap[i]];
			if(h.x<0||h.x>l)printf("Fell off\n");
			else {
				printf("%d ",h.x);
				if(h.w==-1)printf("L");
				if(h.w==0)printf("Turning");
				if(h.w==1)printf("R");
				printf("\n");
				}
			}
		printf("\n");
		}
//	return main();
	return 0;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值