UVa 10881 蚂蚁
https://vjudge.net/problem/UVA-10881
题意:
一根长度为L厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米/秒。当两只蚂蚁相撞时,二者同时掉头。给出每只蚂蚁的初始位置和朝向,计算T秒之后每只蚂蚁的位置。
思路:
首先,如果不考虑掉头的话,蚂蚁相遇时就是对穿而过,如果考虑掉头,局势是不会发生改变的,就是蚂蚁的位置不同。
比如蚂蚁1(2,R),蚂蚁2(4,L),经过3秒后,如果不考虑掉头,那么蚂蚁1(5,R),蚂蚁2(1,L)。如果考虑掉头,则蚂蚁1(1 , L),蚂蚁2(5 , R)。也就是说不管怎样,总有蚂蚁会在(1,L),也总有蚂蚁会在(5,R),所以一开始我们可以不用考虑掉头来计算出所有蚂蚁最后的状态,我们需要确定的就是哪只蚂蚁处于这个状态。
接下来的一点很重要,因为蚂蚁相撞后会掉头,所以蚂蚁的相对顺序是不会变的,也就是说最左边的蚂蚁肯定一直在最左边,从左往右第1只 蚂蚁也肯定一直处于第1只...这个想一下就可以理解了。
既然这样,最后只需要按照坐标排序然后和蚂蚁匹配就可以了。
#include<iostream>
#include<algorithm>
using namespace std; int l, t, n; const int maxn = + ; struct node
{
int id;
int p;
int d; //方向,-1表示往左,0表示碰撞,1表示往右
bool operator <(const node& rhs) const
{
return p < rhs.p;
}
}before[maxn],after[maxn]; int order[maxn]; char dir[][] = { "L", "Turning", "R" }; int main()
{
ios::sync_with_stdio(false);
//freopen("D:\\txt.txt", "r", stdin);
int T;
int p;
char c;
int kase = ;
cin >> T;
while (T--)
{
cin >> l >> t >> n;
for (int i=; i < n; i++)
{
cin >> p >> c;
int d = c == 'L' ? - : ;
before[i].id = i;
before[i].p = p;
before[i].d = d;
after[i].id = ;
after[i].p = t*d + p;
after[i].d = d;
}
sort(before, before + n);
for (int i = ; i < n; i++)
{
order[before[i].id] = i;
} sort(after, after + n);
for (int i = ; i < n;i++)
if (after[i].p == after[i + ].p)
after[i].d = after[i + ].d = ; cout << "Case #" << ++kase << ":" << endl;
for (int i = ; i < n; i++)
{
int num = order[i];
if (after[num].p< || after[num].p>l) cout << "Fell off" << endl;
else cout << after[num].p << " " << dir[after[num].d + ] << endl;
}
cout << endl;
}
}
UVa 10881 蚂蚁的更多相关文章
- cogs 1456. [UVa 10881,Piotr's Ants]蚂蚁
1456. [UVa 10881,Piotr's Ants]蚂蚁 ★ 输入文件:Ants.in 输出文件:Ants.out 简单对比时间限制:1 s 内存限制:128 MB [题目描述 ...
- POJ 1852 Ants || UVA 10881 - Piotr's Ants 经典的蚂蚁问题
两题很有趣挺经典的蚂蚁问题. 1.n只蚂蚁以1cm/s的速度在长为L的竿上爬行,当蚂蚁爬到竿子的端点就会掉落.当两只蚂蚁相撞时,只能各自反向爬回去.对于每只蚂蚁,给出距离左端的距离xi,但不知道它的朝 ...
- UVA.10881 Piotr's Ants (思维题)
UVA.10881 Piotr's Ants (思维题) 题意分析 有一根长度为L cm的木棍,上有n只蚂蚁,蚂蚁要么向左爬,要么向右,速度均为1cm/s,若2只蚂蚁相撞,则蚂蚁同时调头.求解第T秒时 ...
- 【UVa 10881】Piotr's Ants
Piotr's Ants Porsition:Uva 10881 白书P9 中文改编题:[T^T][FJUT]第二届新生赛真S题地震了 "One thing is for certain: ...
- 思维题 UVA 10881 Piotr's Ants
题目传送门 /* 题意:在坐标轴上一群蚂蚁向左或向右爬,问经过ts后,蚂蚁的位置和状态 思维题:本题的关键1:蚂蚁相撞看作是对穿过去,那么只要判断谁是谁就可以了 关键2:蚂蚁的相对位置不变 关键3:o ...
- [ACM_模拟] 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 ...
- Uva 10881 Piotr’s Ants 蚂蚁
一根长度为 L 厘米的木棍上有 n 只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为 1 厘米/秒.当两只蚂蚁相撞时,二者同时调头(掉头用的时间忽略不计).给出每只蚂蚁的初始位置和朝向,计算 T 秒之后 ...
- 【巧妙的模拟】【UVA 10881】 - Piotr's Ants/Piotr的蚂蚁
</pre></center><center style="font-family: Simsun;font-size:14px;"><s ...
- 蚂蚁爬杆问题 UVA 10881
算法入门经典训练指南上的题. 这里有必要讲一下蚂蚁爬杆问题:每只蚂蚁都有一个初始方向,相撞会转向,关键就是相撞的处理,由于速度并不会改变,两只蚂蚁相撞,可以看做,两只蚂蚁穿过对方,继续沿原方向前进,经 ...
随机推荐
- linux两种类型服务管理
linux服务分成两个大类 一.rpm包安装 ---------独立的服务 和 基于xinetd服务 二.源代码安装 rpm包安装的服务,查看命令是 chkconfig --list rpm安装 ...
- Linux root用户下不能打开Google-chrome的解决办法
在root下打开chrome会出现no sandbox的错误 解决方案: 1.找到google-chrome文件 在目录/opt/google/chrome 下 2.使用gedit打开该文件 最后一行 ...
- 制作系统U盘,不用做任何动作直接从U盘启动装系统(非PE的)
用U盘装系统可以用PE方式,进入PE系统,选择镜像文件,然后装,这种比较麻烦. 下面介绍一下从U盘启动,直接装系统的方法,这种方法从U盘启动后,不用做任何动作,就像用光盘装系统一样简单 首先要制作一下 ...
- javaScript的内置对象以及一些常用的方法
前几天,我们学习了JavaScript的入门课程,但是要想做网站,仅仅学会入门是不够的,今后的几天,我将带领大家精通JavaScript,希望大家好好学习! JS内置对象 String对象:字符串对象 ...
- (mac)阿里云ECS服务器配置过程
-----首先本人是半只脚入门的iOS开发者,弄这个只是单纯想多学点东西. -----阿里云服务器的配置选择:既然是学习用的,最最基础的配置就行了.1M带宽,1核1G...这就不详述了.没啥可选的,( ...
- Linux笔记 #07# 搭建机器学习环境
环境: Debian 8.8 64位, 同样适用 win10 基本步骤: 安装 Python 安装必要的库 测试 一.安装 Python 延续之前的 搭建 Python 环境 选取折中版本 Pytho ...
- MySQL Crash Course #13# Chapter 21. Creating and Manipulating Tables
之前 manipulate 表里的数据,现在则是 manipulate 表本身. INDEX 创建多列构成的主键 自动增长的规定 查看上一次插入的自增 id 尽量用默认值替代 NULL 外键不可以跨引 ...
- 深入理解kafka
摘自: <kafka权威指南> 集群间成员关系 Kafka 使用Zoo keeper 来维护集群成员的信息.每个broker 都有一个唯一标识符,这个标识符可以在配置文件里指定,也可以自动 ...
- linux不常用但很有用的命令(持续完善)
Linux登录后设置提示信息: /etc/issue 本地端登录前显示信息文件 /etc/issue.net 网络端登录前显示信息文件 /etc/motd 登陆后显示信息文件 可以添加以下几个常用选项 ...
- 02: DOM 实例
1.1 Event 对象 <body> <a id="myAnchor" href="http://www.microsoft.com"> ...