UVa - 10881 Piotr's Ants(技巧题)

原创 2016年06月01日 08:52:17

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25979

#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
using namespace std;
/***************************************************************************************************************
        题意:一根长L厘米的木棍上有n只蚂蚁,每只蚂蚁有个开始的位置和爬行方向,速度为1.
              当两只蚂蚁相撞后,两者同时掉头继续爬行,求按输入顺序给出每只蚂蚁T秒后的位置后朝向。
        思路:

            1.每只蚂蚁相撞后同时掉头可以看做对穿而过,关键的问题就在于求位置的变化。
            2.按位置从小到大排序,可以发现排序后(befor数组和after数组)所有的蚂蚁相对位置并没有变化,
             改变的只是朝向。

        PS: 重点花时间想了一下次序的问题,order[id] = i,表示第 id 个输入的蚂蚁经排序后的位置为 i
***************************************************************************************************************/

struct Node
{
	int id;
	int p;
	int move;
}node1[10000+5],node2[10000+5];
int order[10000+5];
string s[3] = {"L","Turning","R"};

bool cmp(Node x,Node y){
    return x.p < y.p;
}
int main()
{
	int T,cnt = 0;
	cin>>T;
	while(T--){
		int l,t,n;
		cin>>l>>t>>n;

		int temp,d;
		char c;

		for(int i = 1;i <=n;i ++){
			scanf("%d %c",&temp,&c);
			d = (c == 'L' ? -1 : 1);
			node1[i] = (Node) {i,temp,d};
			node2[i] = (Node) {0,temp + t*d,d};
		}
		sort(node1+1,node1+n+1,cmp);
		for(int i = 1;i <= n;i ++)
			order[node1[i].id] = i;

		sort(node2+1,node2+n+1,cmp);
		for(int i = 1;i < n;i ++)
			if(node2[i].p == node2[i+1].p)
				node2[i].move = node2[i+1].move = 0;
        cout<<"Case #"<<++cnt<<":"<<endl;
		for(int i = 1; i <= n;i ++){
			int a = order[i];
			if(node2[a].p < 0 || node2[a].p > l)	cout<<"Fell off"<<endl;
			else
				cout<<node2[a].p<<" "<<s[node2[a].move+1]<<endl;
		}
		cout<<endl;
	}
	return 0;
}


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

UVa 10881 - Piotr's Ants - 水题

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

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...

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排序并将存储的输入次序附回原位(...

例题5 UVA 10881 蚂蚁(Piotr's Ants)

题目大意就不说了,无论原文还是蓝书,都讲的非常明白易懂! 因为在挑战程序设计的书上看到过一个稍微简单点的蚂蚁,感觉这一类问题比较有意思,就先做了做,整理了一下内容, 整体思路: 因为蚂蚁碰撞后换...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVa - 10881 Piotr's Ants(技巧题)
举报原因:
原因补充:

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