UVA.10881 Piotr’s Ants (思维题)

题意分析

有一根长度为L cm的木棍,上有n只蚂蚁,蚂蚁要么向左爬,要么向右,速度均为1cm/s,若2只蚂蚁相撞,则蚂蚁同时调头。求解第T秒时这n只蚂蚁的状态。

若此时相撞 输出:Turning

若此时已经掉下木棍 输出:Fell off

且要按照输入时的顺序输出各个蚂蚁的状态

此题难点有2个:

1.其实相撞可以理解为交叉走过(因为速度相同)。

2.蚂蚁的相对位置保持不变。

想明白了这两点,难点就转换成了:

1.如何确定蚂蚁的位置;

2.如何处理好蚂蚁的状态。

解决方法如下:

1.首先要按照输入的顺序,给蚂蚁编上号,即ini;

2.给这n只蚂蚁按照从左向右的顺序(即pos升序)排序,并且将其ini写入loca数组。(可以理解为ini是每个蚂蚁的ID,由ini来确认每个蚂蚁的身份)。

3.模拟每只蚂蚁的移动。(利用相撞即交叉走过的原则)。

4.按照移动完的顺序,接着依照pos升序排序。

5.按照loca数组,依次改写从左向右每只蚂蚁的ini(利用的相对位置不变的原则)。

6.按照题目要求输出即可。

代码总览

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define nmax 10005
using namespace std;
struct ant{
int pos,dir,ord,ini;
}a[nmax];
int loca[nmax];
bool cmp(ant x, ant y)
{
return x.pos<y.pos;
}
bool cmp1(ant x, ant y)
{
return x.ini<y.ini;
}
int main()
{
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
int cas = 0;
const char *arr [] ={"L","Turning","R"};
int N;
scanf("%d",&N);
while(N--){
printf("Case #%d:\n",++cas);
memset(a,0,sizeof(a));
memset(loca,0,sizeof(loca));
int L,T,n;
scanf("%d%d%d",&L,&T,&n);
for(int i = 0; i<n; ++i){
int p;char t;
scanf("%d %c",&p,&t);
a[i].pos = p;
a[i].dir = (t == 'L'?-1:1);
a[i].ini = i;
}
sort(a,a+n,cmp);
for(int i = 0; i<n;++i){
loca[i] = a[i].ini;
a[i].pos = a[i].pos + a[i].dir * T;
}
sort(a,a+n,cmp);
for(int i = 0;i<n;++i){
a[i].ini = loca[i];
}
for(int i = 0; i<n-1;++i)
if(a[i].pos == a[i+1].pos) a[i].dir =a[i+1].dir = 0;
sort(a,a+n,cmp1);
for(int i = 0;i<n;++i){
if(a[i].pos<0 || a[i].pos>L) printf("Fell off\n");
else{
printf("%d %s\n",a[i].pos,arr[a[i].dir+1]);
}
}
printf("\n");
}
return 0;
}

UVA.10881 Piotr's Ants (思维题)的更多相关文章

  1. 思维题 UVA 10881 Piotr's Ants

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

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

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

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

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

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

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

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

  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 解题报告

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

  8. uva 10881 - Piotr's Ants

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

  9. UVa 10881 Piotr's Ants (等价变换)

    题意:一个长度为L的木棍上有n个蚂蚁,每只蚂蚁要么向左,要么向右,速度为1,当两只蚂蚁相撞时, 它们同时掉头.给定每只蚂蚁初始位置和朝向,问T秒后,每只蚂蚁的状态. 析:刚看到这个题时,一点思路也没有 ...

随机推荐

  1. 了解和分析iOS Crash

    WeTest 导读 北京时间凌晨一点,苹果一年一度的发布会如期而至.新机型的发布又会让适配相关的同学忙上一阵子啦,并且iOS Crash的问题始终伴随着移动开发者.本文将从三个阶段,由浅入深的介绍如何 ...

  2. QXDM及QCAT软件使用入门指南V1.0

    链接:https://pan.baidu.com/s/1i55YXnf 密码:v6nw

  3. 如何用istio实现应用的灰度发布

    Istio为用户提供基于微服务的流量治理能力.Istio允许用户按照标准制定一套流量分发规则,并且无侵入的下发到实例中,平滑稳定的实现灰度发布功能. 基于华为云的Istio服务网格技术,使得灰度发布全 ...

  4. Linux命令应用大词典-第5章 显示文本和文件内容

    5.1 cat:显示文本文件 5.2 more:分页显示文本文件 5.3 less:回卷显示文本文件 5.4 head:显示指定文件前若干行 5.5 tail:查看文件末尾数据 5.6 nl:显示文件 ...

  5. post接口_ajax上传

    Action() { web_reg_save_param("find_msg", "LB=message\":\"", "RB= ...

  6. spark相关脚本解析

    spark-shell/spark-submit/pyspark等关系如下: #spark-submit 逻辑: ########################################### ...

  7. yun rpm

    RPM:RedHat Package Manager的简称,是一种数据库记录的方式的管理机制.当需要安装的软件的依赖软件都已经安装,则继续安装,否则不予安装. 特点:1.已经编译并打包完成2.软件的信 ...

  8. 如何在线测试Exchange的速度

    最新碰到了客户需要比较国内版和国际版的Office365的速度问题,微软提供在线工具测试 这里以Exchange 测试为例子,请参考. PS Onenote贴过来只能至图片,各位看官只能将就了 这里有

  9. python数据文件读写

    CSV格式读写 Comma-Separated Values 有时也称为字符分隔值,因为分隔字符也可以不是逗号.以,分隔的文件叫csv,以\t分隔的叫tsv 需要注意的一点:分隔符 import cs ...

  10. [C++ map & dp]codeforces 960F. Pathwalks

    题目传送门:960F 思路: 题目给人的感觉很像最长上升子序列,自然而然想到用dp的思路去处理 题目中给的限制条件是,要接上前面的边,前面的边权一定要小于当前的边权(题目按照输入的顺序,因此只找前面的 ...