UVa 10881 Piotr's Ants (等价转化思想)

UVA-10881 蚂蚁 Piotr's Ants 题目大意:一根长L厘米的木棍上有n只蚂蚁,每只蚂蚁有个开始的位置和爬行方向,速度为1.当两只蚂蚁相撞后,两者同时掉头继续爬行,求按输入顺序给出每只蚂蚁T秒后的位置后朝向。 /*蚂蚁相遇时可以理解为“对穿而过" 关键是找到移动后,对应位置的蚂蚁是最初的哪只蚂蚁, 于是发现蚂蚁移动后的相对顺序是不变的,于是用order数组哈希定位 order[i]数组:最初顺序为i的位置,这个打表用得好 感觉用两个 阅读详情

10881 - Piotr's Ants

Time limit: 3.000 seconds

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=456&page=show_problem&problem=1822

"One thing is for certain: there is no stopping them;
the ants will soon be here. And I, for one, welcome our
new insect overlords."
Kent Brockman

Piotr likes playing with ants. He has n of them on a horizontal pole L cm long. Each ant is facing either left or right and walks at a constant speed of 1 cm/s. When two ants bump into each other, they both turn around (instantaneously) and start walking in opposite directions. Piotr knows where each of the ants starts and which direction it is facing and wants to calculate where the ants will end up T seconds from now.

Input
The first line of input gives the number of cases, N. N test cases follow. Each one starts with a line containing 3 integers: L , T and n  (0 <=  n <= 10000) . The next n lines give the locations of the n ants (measured in cm from the left end of the pole) and the direction they are facing (L or R).

Output
For each test case, output one line containing "Case #x:" followed by n lines describing the locations and directions of the n ants in the same format and order as in the input. If two or more ants are at the same location, print "Turning" instead of "L" or "R" for their direction. If an ant falls off the pole before Tseconds, print "Fell off" for that ant. Print an empty line after each test case.

Sample InputSample Output
2
10 1 4
1 R
5 R
3 L
10 R
10 2 3
4 R
5 L
8 R
Case #1:
2 Turning
6 R
2 Turning
Fell off

Case #2:
3 L
6 R
10 R

思路:

1. 掉头等价于对穿而过

2. 所有蚂蚁的相对顺序不变

3. 注意将T秒时位置相同的蚂蚁标记为“Turning”

4. 用三个数组,分别记录输入的顺序和T秒前后的位置


完整代码:

/*0.039s*/

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 10000 + 5;
const char dirName[][10] = {"L", "Turning", "R"};

struct Ant
{
	int id; // 输入顺序
	int p;  // 位置
	int d;  // 朝向。 -1: 左; 0:转身中; 1:右
	bool operator < (const Ant& a) const
	{
		return p < a.p;
	}
} before[maxn], after[maxn];

int order[maxn]; // 输入的第i只蚂蚁是终态中的左数第order[i]只蚂蚁

int main(void)
{
	int K;
	scanf("%d", &K);
	for (int kase = 1; kase <= K; kase++)
	{
		int L, T, n;
		printf("Case #%d:\n", kase);
		scanf("%d%d%d", &L, &T, &n);
		for (int i = 0; i < n; i++)
		{
			int p, d;
			char c;
			scanf("%d %c", &p, &c);
			d = (c == 'L' ? -1 : 1);
			before[i] = (Ant)
			{
				i, p, d
			}; // 类型转换技巧~
			after[i] = (Ant)
			{
				0, p + T*d, d
			}; // 这里的id是未知的
		}
		
		// 计算order数组
		sort(before, before + n);
		for (int i = 0; i < n; i++)
			order[before[i].id] = i;
			
		// 计算终态
		sort(after, after + n);
		for (int i = 0; i < n - 1; i++) // 修改碰撞中的蚂蚁的方向
			if (after[i].p == after[i + 1].p) after[i].d = after[i + 1].d = 0;
			
		// 输出结果
		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].d + 1]);
		}
		printf("\n");
	}
	return 0;
}

ECharts 实现世界地图 效果图 源代码(仅供参考) <template> <div class="echarts"> <div class="className" id="id" style="width: 100%; height: 450px" ref="myEchart" ></div> </div> </template> <script lang="ts"> imp 阅读详情

相关推荐

PCIE配置和地址空间

来源:https://www.jianshu.com/p/574e9a2cbc4e 每个PCIe设备,有这么一段空间,Host软件可以读取它获得该设备的一些信息,也可以通过它来配置该设备,这段空间就叫做PCIe的配置空间。不同于每个设备的其它空间,PCIe设备的配置空间是协议规定好的,哪个地方放什么内容,都是有定义的。PCI或者PCI-X时代就有配置空间的概念,那时的配置空间如下: 图6.1 整个配置空间就是一系列寄存器的集合,其中Type 0是Endpoint的配置,Type 1是Brid.

qq_28643619的博客 4059

uva 10881 - Piotr's Ants(排序)

题目链接:10881 - Piotr's Ants 题目大意:在一个长为L的木棒上有n只蚂蚁,给出蚂蚁的初始位置以及方向,问说移动T秒后各个蚂蚁的位置以及状态,如果两只蚂蚁在移动的过程中相撞,则会同时掉头。 解题思路:问题只要解决说两只蚂蚁相撞的情况就差不多了,其实从整体上来看(不考虑蚂蚁的编号),“相撞”和对穿而过“是一样的,只不过移动到那个位置的蚂蚁并不是先前的那只。所以说

不慌不忙、不急不躁 1375

基于RFM模型的电商零售数据分析

E-Commerce Data 数据集介绍 E-Commerce Data Actual transactions from UK retailer 数据集地址(kaggle) https://www.kaggle.com/carrie1/ecommerce-data/kernels 该数据来源于kaggle,是一家注册在英国的电子商务网站的2010年12月份-2011年12月份之间的...

W_H_M_2018的博客 3099

Piotr's Ants UVA - 10881 (我的天,晚安晚安~~)

#include <iostream> #include<stdio.h> #include<algorithm> #include<map> using namespace std; const int maxn=10009; struct st { int id; int x; int i; } a[maxn]...

chen_zan_yu_的博客 210

从X86到ARM:全面解析服务器CPU架构的演变与未来趋势

本文深入解析了服务器CPU架构从X86到ARM的演变历程与未来趋势。文章从CISC与RISC两种设计哲学切入,分析了X86凭借生态建立的帝国地位及其面临的功耗挑战,并重点阐述了ARM架构凭借其卓越的能效比优势,正从移动端向数据中心市场发起冲击。未来,异构计算、软硬协同与专用芯片将成为服务器CPU发展的核心方向。

gold的博客 1127

系统安装、qt配置、安装pcie驱动

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 安装Linux系统指定:ununtu20.04并配置相关软件环境 前言 提示:这里可以添加本文要记录的大概内容: ununtu20.04、Qt 5.9.0、pcie驱动 提示:以下是本篇文章正文内容,下面案例可供参考 一、安装系统 制作系统盘(win10),在开机时按相应键进入BIOS,(华硕需要先改配置启动->CSM->开启->第一个选项选第一个或第二个),等待即可 进入后按照https://www.sysgeek.

weixin_44832804的博客 2205

UVA 10881 Piotr's Ants

题目链接:https://vjudge.net/problem/UVA-10881 题目大意:有一根水平的杆,长为L单位,有n个蚂蚁左右爬,速度为每秒1个单位,两个蚂蚁碰头就瞬间反转方向继续爬,直到时间到T或者掉落杆子。 题目思路:这道题是一道思维题,关键在于三个点, 其一,计算蚂蚁最终位置时可以认为蚂蚁碰头是“擦肩而过”, 其二,每个蚂蚁其实只能在它左右的两个蚂蚁之间活动,换言之蚂蚁所...

anxie3867的博客 173

与rkipc通信

函数名称功能系统模块初始化系统模块反初始化重启恢复出厂设置导出日志导出配置文件导入配置文件系统升级获取用户数设置用户数获取用户权限设置用户权限获取用户名设置用户名获取密码(已加密)设置密码(已加密)新增用户删除用户。

qq_44643189的博客 1612

【UVa10881 Piotr's Ants】数学 | 思维 | STL | E

近来感觉脑袋有点抽,做几道思维题活动活动… 【UVa10881】Piotr’s Ants Time limit: 3.000 seconds Tags:数学 思维 题目描述 给定一根长为 L&nbsp;cmL\ cmL&nbsp;cm 的木棍和 nnn 只蚂蚁在初始时刻距木棍左端点的距离以及初始朝向(LLL 表示向左,RRR 表示向右) 蚂蚁运动速度为 1&nbsp;cm/s1\ cm/s1...

Keyu Tian's blog 225

STM32L433使用DSP库配置过程

STM32L433中有FPU,在使用中为了使用其中的部分函数,需要对其进行配置。     配置成功后做些总结,留待后续复习备忘,同时也希望有朋友像我一样使用DSP库配置时少走弯路,留作交流。

在在在的博客 4550

深度解析:C# Modbus TCP协议解析与异常处理(工控上位机必备)

协议解析要精准:掌握MBAP头和PDU的结构,尤其是常用功能码的请求/响应格式,避免因字节处理错误导致通信失败;异常处理要全面:覆盖通信层、协议层、数据层的所有异常类型,针对工业场景制定重试、重连、滤波等策略;资源管理要规范:使用释放资源,采用连接池复用连接,避免端口泄露;工业场景要适配:结合工控现场的特点(网络波动、电磁干扰、设备忙),优化通信效率和数据处理逻辑。通过以上解析和策略,可确保C#上位机与工业设备的Modbus TCP通信具备高稳定性、高可靠性、高容错性,满足工控领域的严苛要求。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 997

UVA - 10881 Piotr's Ants 推理

题目大意:有n只蚂蚁在一根长度为L的木棍上,这n只蚂蚁有的向左移动有的向右移动,如果两只蚂蚁相碰的话,这两只蚂蚁就会按相反方向继续前进,每只蚂蚁的移动速度为1m/s,问T秒后每只蚂蚁的状态和所在的位置 解题思路:按从木棒的从左到右排序,T秒后,每只蚂蚁在木棒上的从左到右的位置是不变,这样的话,就可以确定每只蚂蚁最终位置,因为相碰的话,就会按反方向运动,这样的话就相当于两只蚂蚁交换移动,剩下的移动

静静地码 680

LPDDR6与LPDDR5 State Diagram技术探讨

LPDDR6与LPDDR5 State Diagram技术探讨

zilan23的博客 1176

UVa10881 Piotr's Ants【模拟】

“One thing is for certain: there is no stopping them; the ants will soon be here. And I, for one, welcome our new insect overlords.” Kent Brockman  Piotr likes playing with ants. He has n of them

海岛Blog 1430

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

UVa 10881 Piotr's Ants (排序)

UVa 10881 Piotr’s Ants题目大意:在L长的木棍上有n只蚂蚁,向左或右爬,速度为1单位长度每秒,若两蚂蚁撞上,则掉头,求T秒以后各蚂蚁所在位置,若掉下去,输出”Fell off”,否则输出位置和朝向,若此时正撞上,朝向输出”Turning”.题目分析:这道题还是有一些思维含量的.实际上,n只蚂蚁在爬行过程中,其相对位置(也就是第几号位置)是不会改变的,所以可以不考虑对撞之后换方向的

Continue 482

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

uva 10881 Piotr's Ants (模拟)

uva 10881 Piotr's Ants "One thing is for certain: there is no stopping them; the ants will soon be here. And I, for one, welcome our new insect overlords."Kent Brockman Piotr likes playing wit

总有那么一群人喜欢盯着我的博客看,估计这是他们见过最长的博客名,我必须得告诉他们博客名最长可以写多长 1113

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Piotr‘s Ants(UVA 10881)

这是本博主的第4篇UVa题解: 上一篇:Parentheses Balance(UVA-673) 题目位置:Piotr's Ants(UVA 10881) 主页:Jimmy的博客 Input 输入的第一行为数据组数。每组数据的第一行为3个正整数L,T,n(0<=n<=10000);以下n行每行描述一只蚂蚁的初始位置。其中,整数x为蚂蚁距离左端的距离(单位:厘米),字母表示朝向(L表示朝左,R表示朝右)对于每组数据,输出n行,按输入顺序输出每只蚂蚁的位置和

2401_89382924的博客 462

UVa 10881Piotr's Ants【思维】

题目链接 对于每个蚂蚁来说,他相对于其他蚂蚁的位置是固定的,赶超前面或者被后面的赶超都是要回头的,所以,假设木棒无限长,位于第一位的永远在第一位,第二位的永远在第二位。同时每两个碰头的蚂蚁其实就是类似于交换了身份继续前进。所以,先不管他们的碰头,就让每个沿着路线继续走下去。由前面的可以知道,每个蚂蚁的最终状态的位置排列的顺序就是一开始蚂蚁的编号。 #include #include #in

博客已搬迁到http://www.cnblogs.com/cniwoq/ 516

UVA 10881 [Piotr's Ants]

UVA 10881 [Piotr’s Ants]index UVA 10881 Piotrs Ants index Description input output code DescriptionPiotr likes playing with ants. He has n of them on a horizontal pole L cm long. Each ant is facing

arbietrsc的博客 359

Piotr's ants UVA 10881

Problem D Piotr's Ants Time Limit: 2 seconds   "One thing is for certain: there is no stopping them; the ants will soon be here. And I, for one, welcome our new insect overlords."

Jackwuyongxing的专栏 608

Ants(POJ 1852)/Piotr's Ants(UVa 10881)思维题

对于POJ这道,题目并没有问区别ants的问题,故直接利用不同蚂蚁相撞视作穿过对方即可。 对于UVa这道,不同蚂蚁的输出顺序不同,思路:1. 先按照不同蚂蚁能够穿过对方,求出该蚂蚁能到达的地方,在该处一定有一只蚂蚁能够到达; 2. 不同蚂蚁在t秒前后相对位置不变的,因为蚂蚁实际上并没有穿过对方,故按距离左端点排序t秒后仍是该顺序。 POJ1852: #include<cstdio> #...

weixin_44756457的博客 267

uva10881 Piotr's Ants

分析

YHaX的博客 264

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, welcome our new insect overlords.” —–Kent Brockman Problem Description Piotr likes playing with an

ここはHudsonJoeのブログです,いらっしゃいませ 683

UVa 10881-Piotr's Ants(很棒的思维题)

https://vjudge.net/problem/UVA-10881 题目大意: 在一根长为L的木棍上有n只蚂蚁,每只蚂蚁有一个前进的方向,每只蚂蚁的速度都是1厘米/秒,当两只蚂蚁相遇时,两只蚂蚁将会拐弯,即前进方向与之前相反,现在给出时间T和初始状态所有蚂蚁的位置和方向,请求出T时刻每只蚂蚁的位置和方向(如果掉落输出Fell off) 思路: 如果按照题目模拟,显然不是好的做法,必超...

Q755100802的博客 309

uva 10881 Piotr's Ants

uva 10881 Piotr's Ants- black的专栏 - waShaXiu

black的专栏 575

思维题 UVA 10881 Piotr's Ants

题目传送门 1 /* 2 题意:在坐标轴上一群蚂蚁向左或向右爬,问经过ts后,蚂蚁的位置和状态 3 思维题:本题的关键1:蚂蚁相撞看作是对穿过去,那么只要判断谁是谁就可以了 4 关键2:蚂蚁的相对位置不变 关键3:order数组记录顺序 5 */ 6 #include <cstdio> 7 #i...

weixin_33725272的博客 134
上一篇: NEERC 2006 / UVa 1388 Graveyard (数学&想法题&找最近整数)
下一篇: World Finals 2004 / UVa 1030 Image Is Everything (想法题&迭代更新)
synapse7
博客等级 码龄14年 432粉丝 701原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值