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

★   输入文件:Ants.in   输出文件:Ants.out   简单对比
时间限制:1 s   内存限制:128 MB

【题目描述】

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

【输入格式】

输入第一行为数据组数。每组第一行为三个整数L,T,n(n≤10 000);以下n行描述一只蚂蚁的初始位置,其中,整数x为蚂蚁距左端的距离(单位:厘米),字母表示初始朝向(L向左,R向右)。

【输出格式】

对于每组数据,输出n(Case #n:),按输入顺序输出每只蚂蚁的位置和朝向(Turning表示正在碰撞)。在T秒之前已经掉落的蚂蚁(正好爬到边缘不算)输出Fell off

【样例输入】

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

【来源】

UVa 10881,Piotr's Ants

思路:

  假设你在远处观察这些蚂蚁的运动,会看到什么?一群密密麻麻的小黑点在移动。由于黑点太小,所以当蚂蚁一碰撞而掉头时,看上去和两个点”对穿而过“没有什么区别。换句话说,如果把蚂蚁看做是没有区别的小点,那么只需要计算出每只蚂蚁在T时刻的位置即可。比如,有3只蚂蚁,蚂蚁1=(1,R),蚂蚁2=(3,L),蚂蚁3=(4,L),则两秒之后,三只蚂蚁分别为(3,R),(1,L)和(2,L)。

  注意,虽然从整体上讲,”掉头“等价于”对穿而过“,但对于每只蚂蚁而言,并不是这样。蚂蚁1的初始状态为(1,R),因此一定有一只蚂蚁在两秒钟之后处于(3,R)的状态,但这只蚂蚁却不一定是蚂蚁1.换句话说,我们需要搞清楚目标状态中的”谁是谁“。

  可以想象一下,所有蚂蚁的相对顺序是保持不变的。然后这个问题就很好解决了。

这是代码:

#include<map>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 10001
using namespace std;
map<int,int>vis;
int T;
int len,t,n,num;
struct nond{
int pos,turn,id;
}v[MAXN],vv[MAXN];
int cmp(nond a,nond b){
return a.pos<b.pos;
}
int cmp1(nond a,nond b){
return a.id<b.id;
}
int main(){
freopen("Ants.in","r",stdin);
freopen("Ants.out","w",stdout);
scanf("%d",&T);
for(int k=;k<=T;k++){
vis.clear();
memset(v,,sizeof(v));
memset(vv,,sizeof(vv));
printf("Case #%d:",k);
scanf("%d%d%d",&len,&t,&n);
for(int i=;i<=n;i++){
char c;
scanf("%d %c",&v[i].pos,&c);
if(c=='R') v[i].turn=;
else v[i].turn=-;
v[i].id=i;vv[i]=v[i];
}
sort(v+,v++n,cmp);
sort(vv+,vv++n,cmp);
for(int i=;i<=n;i++){
if(vv[i].turn==-) vv[i].pos-=t;
else if(vv[i].turn==) vv[i].pos+=t;
if(vv[i].pos>len||vv[i].pos<) vv[i].turn=;
else vis[vv[i].pos]++;
}
sort(vv+,vv++n,cmp);
for(int i=;i<=n;i++){
v[i].pos=vv[i].pos;
v[i].turn=vv[i].turn;
}
sort(v+,v++n,cmp1);
for(int i=;i<=n;i++){
if(v[i].turn==) cout<<"Fell off"<<endl;
else if(vis[v[i].pos]!=) cout<<v[i].pos<<" "<<"Turning"<<endl;
else if(v[i].turn==) cout<<v[i].pos<<" "<<"R"<<endl;
else cout<<v[i].pos<<" "<<"L"<<endl;
}
}
}

cogs 1456. [UVa 10881,Piotr's Ants]蚂蚁的更多相关文章

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

  2. Uva 10881 Piotr’s Ants 蚂蚁

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

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

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

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

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

  5. 思维题 UVA 10881 Piotr's Ants

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

  6. UVA 10881 Piotr's Ants(等效变换 sort结构体排序)

    Piotr's AntsTime Limit: 2 seconds Piotr likes playing with ants. He has n of them on a horizontal po ...

  7. UVA 10881 - Piotr's Ants【模拟+思维】

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

  8. uva 10881 Piotr's Ants 解题报告

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

  9. uva 10881 - Piotr's Ants

    这个题的突破点就在于蚂蚁不能够穿过对方,故相对位置不变: 另外,又可以把蚂蚁看成运动方向不变: 代码: #include<cstdio> #include<algorithm> ...

随机推荐

  1. Linux经常使用命令(九) - cat

    cat命令的用途是连接文件或标准输入并打印.这个命令经常使用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 1. 命令格式: cat [选项] 文 ...

  2. Java中泛型的各种使用

    Java中的泛型的使用: 1.普通的泛型使用 在使用类的时候后面的<>中的类型就是我们确定的类型. public class MyClass1<T> {//此处定义的泛型是T ...

  3. jni java与c++交互返回三维数组jobjectArray

    1.在java里创建一个类,在类里添加静态方法调用c++的类库dll,在java里创建要返回数组的函数.在java的main方法里创建返回后的测试方法. package cn.gov.cma.cnn. ...

  4. 各大CMS系统优缺点(2017)

    各大CMS系统优缺点(2017) 总结 WordPress之前用过,可能需要再完整的用一个才会比较了解. 从2015年各行业建站规模来看,还有一大批人想自己搭建网站,下面为大家盘点一下比较实用CMS系 ...

  5. 转一篇100offer的采访~35岁程序员是一种什么状态

    随着互联网的高速发展变革,大龄恐惧症越来越多地在技术圈被人讨论.很多程序员在工作5-10年以后,都会开始思考5年.10年甚至更久以后的自己,会是怎样一种生活工作状态,以及是否会被时代抛弃. 特别是全民 ...

  6. springBoot 打war包 程序包com.sun.istack.internal不存在的问题

    使用的是 idea - Lifecycle-package 的方式打包(maven) 确认  <packaging>war</packaging> 修改启动类: (原启动类) ...

  7. linux中不同颜色的文件代表什么不同的类型

    linux 文件颜色的含义,蓝色代表目录,绿色代表可执行文件,红色表示压缩文件,浅蓝色表示链接文件,灰色表示其他文件,红色闪烁表示链接的文件有问题了,黄色表示设备文件.蓝色文件----------目. ...

  8. PostgreSQL Replication之第九章 与pgpool一起工作(1)

    在前面的章节中,我们已经能够深入地理解了pgbouncer,同时也学会了如何使用它来尽可能地优化复制设置.在本章我们将了解一个经常被称作与pgbouncer相对应的工具.尽管pgpool的思想与pgb ...

  9. codeforces 544 D Destroying Roads 【最短路】

    题意:给出n个点,m条边权为1的无向边,破坏最多的道路,使得从s1到t1,s2到t2的距离不超过d1,d2 因为最后s1,t1是连通的,且要破坏掉最多的道路,那么就是求s1到t1之间的最短路 用bfs ...

  10. 隐私:随机选择 MAC 地址

    隐私:随机选择 MAC 地址 从 Android 8.0 开始,Android 设备在未连接到网络的情况下探测新网络时会使用随机 MAC 地址. 在 Android 9 中,您可以启用开发者选项(默认 ...