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 蚂蚁的更多相关文章

  1. cogs 1456. [UVa 10881,Piotr's Ants]蚂蚁

    1456. [UVa 10881,Piotr's Ants]蚂蚁 ★   输入文件:Ants.in   输出文件:Ants.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述 ...

  2. POJ 1852 Ants || UVA 10881 - Piotr's Ants 经典的蚂蚁问题

    两题很有趣挺经典的蚂蚁问题. 1.n只蚂蚁以1cm/s的速度在长为L的竿上爬行,当蚂蚁爬到竿子的端点就会掉落.当两只蚂蚁相撞时,只能各自反向爬回去.对于每只蚂蚁,给出距离左端的距离xi,但不知道它的朝 ...

  3. UVA.10881 Piotr's Ants (思维题)

    UVA.10881 Piotr's Ants (思维题) 题意分析 有一根长度为L cm的木棍,上有n只蚂蚁,蚂蚁要么向左爬,要么向右,速度均为1cm/s,若2只蚂蚁相撞,则蚂蚁同时调头.求解第T秒时 ...

  4. 【UVa 10881】Piotr's Ants

    Piotr's Ants Porsition:Uva 10881 白书P9 中文改编题:[T^T][FJUT]第二届新生赛真S题地震了 "One thing is for certain: ...

  5. 思维题 UVA 10881 Piotr's Ants

    题目传送门 /* 题意:在坐标轴上一群蚂蚁向左或向右爬,问经过ts后,蚂蚁的位置和状态 思维题:本题的关键1:蚂蚁相撞看作是对穿过去,那么只要判断谁是谁就可以了 关键2:蚂蚁的相对位置不变 关键3:o ...

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

  7. Uva 10881 Piotr’s Ants 蚂蚁

    一根长度为 L 厘米的木棍上有 n 只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为 1 厘米/秒.当两只蚂蚁相撞时,二者同时调头(掉头用的时间忽略不计).给出每只蚂蚁的初始位置和朝向,计算 T 秒之后 ...

  8. 【巧妙的模拟】【UVA 10881】 - Piotr's Ants/Piotr的蚂蚁

    </pre></center><center style="font-family: Simsun;font-size:14px;"><s ...

  9. 蚂蚁爬杆问题 UVA 10881

    算法入门经典训练指南上的题. 这里有必要讲一下蚂蚁爬杆问题:每只蚂蚁都有一个初始方向,相撞会转向,关键就是相撞的处理,由于速度并不会改变,两只蚂蚁相撞,可以看做,两只蚂蚁穿过对方,继续沿原方向前进,经 ...

随机推荐

  1. 奇特的Local System权限(转载)

    转载自:http://mp.weixin.qq.com/s?__biz=MzA3NTM1MzE4Nw==&mid=202597764&idx=1&sn=0cef1a40fb3c ...

  2. C#实现无标题栏窗体点击任务栏图标正常最小化或还原的解决方法

    对于无标题栏窗体,也就是FormBorderStyle等于System.Windows.Forms.FormBorderStyle.None的窗体,点击任务栏图标的时候,是不能象标准窗体那样最小化或还 ...

  3. iOS 开发笔记-plist使用

    1.创建一个plist 2.填写为ImageList.plist 3.填入数据 4.完成 加载代码: @interface UYViewController () //图片信息的数组 @propert ...

  4. Summary: Depth-first Search(DFS)

    There are generally two methods to write DFS algorithm, one is using recursion, another one is using ...

  5. 剑指offer2

    请实现一个函数,将一个字符串中的字符串空格替换成“%20”.例如:“We Are Happy”转化后为“We%20Are%20Happy” 思路:把字符串转化成字符数组,判断这个字符是不是空格,如果是 ...

  6. php分层

    表示层         UI      主要表示WEB方式,也可以表示成WINFORM方式.如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务. 业务逻辑层  BLL     ...

  7. css rgba透明度变化

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件)

    前面一节中鸡啄米为大家简单介绍了如何创建Ribbon样式的应用程序框架,本节教程就来初步讲讲怎样为Ribbon Bar添加Ribbon控件. VS2010为Ribbon界面开发提供了Ribbon De ...

  9. MacaW Baby Learns Computer

    A - Macaw Baby Learns Computer Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:%lld & ...

  10. EXT3.0在IE下Range不兼容解决办法

    采用EXT3.0创建一个提示框,IE9下显示异常.经过资料查询,发现添加如下代码即可解决问题. // 这段代码是为了兼容IE if ((typeof Range !== "undefined ...