uva 10881 - Piotr's Ants(排序)

原创 2013年12月02日 19:41:36

题目链接:10881 - Piotr's Ants


题目大意:在一个长为L的木棒上有n只蚂蚁,给出蚂蚁的初始位置以及方向,问说移动T秒后各个蚂蚁的位置以及状态,如果两只蚂蚁在移动的过程中相撞,则会同时掉头。


解题思路:问题只要解决说两只蚂蚁相撞的情况就差不多了,其实从整体上来看(不考虑蚂蚁的编号),“相撞”和对穿而过“是一样的,只不过移动到那个位置的蚂蚁并不是先前的那只。所以说只要记录下每只蚂蚁的顺序,它是不会因为移动而跳到另外一只的前面。


#include <stdio.h>
#include <string.h>
#include <algorithm>

using namespace std;

const int  N = 10005;
const char dirName[][10] = { "L", "Turning", "R" };

struct Ant {
	int id;
	int p;
	int dir;
	bool operator < (const Ant& c) const {
		return p < c.p;
	}
}before[N], after[N];
int L, T, n, order[N];

void input() {
	scanf("%d%d%d", &L, &T, &n);

	int d;
	char ch;
	for (int i = 0; i < n; i++) {
		scanf("%d %c", &before[i].p, &ch);
		before[i].id = i;
		d = after[i].dir = before[i].dir = (ch == 'L')? -1: 1;
		after[i].p = before[i].p + T * d;
	}
}

void solve() {

	memset(order, 0, sizeof(order));
	sort(before, before + n);
	for (int i = 0; i < n; i++)
		order[before[i].id] = i;

	sort(after, after + n);
	for (int i = 1; i < n; i++)
		if (after[i - 1].p == after[i].p) after[i - 1].dir = after[i].dir = 0;
}

void output() {
	for (int i = 0; i < n; i++) {
		int a = order[i];
		if (after[a].p < 0 || after[a].p > L) printf("Fell off\n");
		else printf("%d %s\n", after[a].p, dirName[after[a].dir + 1]);
	}
	printf("\n");
}

int main () {
	int cas;
	scanf("%d", &cas);
	for (int i = 1; i <= cas; i++) {
		input();

		solve();

		printf("Case #%d:\n", i);
		output();
	}
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

uva - 10881 - Piotr's Ants(等效变换,排序)

题意:一根长为L厘米的木棍上有n只蚂蚁,每只蚂蚁要么向左爬,要么向右爬,速度为1厘米/秒,当相撞时同时掉头(掉头时间忽略不计),给出初始位置和朝向,计算T秒后的位置和朝向。 方法:和另一个蚂蚁的题目有...

BNU19299 UVA10881 Piotr's Ants

Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA. Original ID: 108...

UVA10881 Piotr's Ants

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category...

UVA - 10881 Piotr's Ants(思维)

点击打开题目链接 Piotr’s AntsDescriptionPiotr likes playing with ants. He has n of them on a horizontal pol...

UVa 10881 - Piotr's Ants - 水题

题目描述:lrj后白书第一章第五道例题 题目分析:1)从宏观上看,蚂蚁碰撞并没有影响它们的爬行; 2) 蚂蚁的相对位置是不会变的。所以只需要处理初始状态和最后的状态即可。 下面是代码: #inc...
  • mr_zys
  • mr_zys
  • 2013年12月18日 22:13
  • 572

Piotr's Ants(Uva 10881)

“One thing is for certain: there is no stopping them; the ants will soon be here. And I, for one, we...

UVA-10881 - Piotr's Ants

Piotr's Ants Time Limit: 2 seconds "One thing is for certain: there is no stopping them;...

UVA 10881 Piotr's Ants (思维)

Problem D Piotr's Ants Time Limit: 2 seconds "One thing is for certain: there is no stopping them; ...

Uva 10881 - Piotr's Ants( 转换思维 )

题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=20&page=show_pro...

Uva10881 - Piotr's Ants(蚂蚁)

这是一个等效变换问题,感觉解法还是蛮叼的。 应注意记录输入次序; 在按照Pos从大到小排序后,用一个数组存储输入次序; 在对Pos进行T的+/-后,重新按照Pos排序并将存储的输入次序附回原位(...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:uva 10881 - Piotr's Ants(排序)
举报原因:
原因补充:

(最多只允许输入30个字)