LINK:Andrew the Ant

题意:给一根长度为L的木头,上面有A只蚂蚁【每只蚂蚁给出了初始行走的方向,向左或向右】。当两只蚂蚁相碰时,两只蚂蚁就朝相反的方向行走~╮(╯▽╰)╭问的是:最后掉下来的蚂蚁用时多少,并且它的初始位置是哪里?【若有两只,就先输出初始位置小的那只】~

这道题跟白书里的那道题十分的像,不过白书问的是:给出时间T,问最后每只蚂蚁的位置是什么~

题目的关键是:

1.当两只蚂蚁相碰的时候,其实就好像是两只蚂蚁穿过了~那么,每输入一只蚂蚁,那么一定存在对应的一只蚂蚁【也可能是自身】符合:若它要掉下来,那么它走的路程就是——若向右,X=L-P;若向左,X=P【X为要走的路程,P为输入的那只蚂蚁的初始坐标,L为木头长度】。由于速度是一格每秒,故最后的那只蚂蚁掉下来的蚂蚁用时T为所有X中最大的~同样,由于把蚂蚁相碰当成对穿而过,就没办法确定终态的蚂蚁是始态的那只蚂蚁了。换句话说:我们剩下就是搞清楚终态的蚂蚁对应的是那只始态的蚂蚁~

2.其次,我们可以注意到蚂蚁的相对位置是始终不变的,因此把所有目标位置从小到大排好序,则从左到右的每个位置对应始态的从左到右的每只蚂蚁。由于原题不一定按从左到右的顺序输入,还需要预处理计算出输入中的第i只蚂蚁的顺序号order[i]。

代码如下:

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; #define Max 100111 struct Ant {
int id; //输入顺序
int p; //输入位置
int d; //输入蚂蚁的方向,-1为向左,1为向右,0为转身中
bool operator < (const Ant& a) const {
return p>a.p;
}
}before[Max],after[Max]; int order[Max]; //输入的第i只蚂蚁是终态中的左数第order[i]只~ int main(){
int A,L;
while(~scanf("%d%d",&L,&A))
{
memset(before,,sizeof(before));
memset(after,,sizeof(after));
int i,j,MM=; //MM为最后的蚂蚁要掉下来的时间
for(i=;i<A;i++)
{
int p,d;
char c;
scanf("%d %c",&p,&c);
d=(c=='L'?-:);
before[i]=(Ant){i,p,d};
after[i]=(Ant){,,d}; //终态的id是未知的
if(d==) //计算出MM的值
MM=max(MM,L-p);
else
MM=max(MM,p-);
}
for(i=;i<A;i++) //计算出经过MM时间后蚂蚁的终态位置
after[i].p=(MM)*after[i].d+before[i].p;
//计算order数组
sort(before,before+A);
for(i=;i<A;i++)
order[before[i].id]=i;
//计算终态
sort(after,after+A);
for(i=;i<A-;i++)
if(after[i].p==after[i+].p) after[i].d=after[i+].d=;
int k=,x[]; //x[]记录的是最后两只蚂蚁的始态,k为最后掉下来的蚂蚁数
memset(x,,sizeof(x));
for(i=;i<A;i++)
{
int a=order[i];
if(after[a].p== || after[a].p==L)
x[k++]=before[a].p;
}
if(k==) printf("The last ant will fall down in %d seconds - started at %d.\n",MM,x[]);
else
{
sort(x,x+);
printf("The last ant will fall down in %d seconds - started at %d and %d.\n",MM,x[],x[]);
}
}
return ;
}

//memory:4224KB    time:224ms

BNUOJ 26579 Andrew the Ant的更多相关文章

  1. BNU 26579 Andrew the Ant 【蚂蚁】

    链接: http://www.bnuoj.com/bnuoj/problem_show.php?pid=26579 http://www.bnuoj.com/bnuoj/contest_show.ph ...

  2. Jenkins 安装的HTML Publisher Plugin 插件无法展示ant生成的JunitReport报告

    最近在做基于jenkins ant  junit 的测试持续集成,单独ant junit生成的junitreport报告打开正常,使用Jenkins的HTML Publisher Plugin 插件无 ...

  3. React中使用Ant Table组件

    一.Ant Design of React http://ant.design/docs/react/introduce 二.建立webpack工程 webpack+react demo下载 项目的启 ...

  4. [Ant]Ant简易教程

    前言 Apache Ant,是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发.由Apache软件基金会所提供. Ant是纯Java语言编写的,所以具有 ...

  5. jenkins / ant / jmeter 持续集成接口自动化

    1. 将 jmeter 脚本放在/var/lib/jenkins/workspace/Jmeter_auto/jmxpath路径下 2. 点击http://jk.facebank.net.cn/job ...

  6. Maven与Ant比较

    Maven与Ant比较 0 « 上一篇:Jenkins学习三:介绍一些Jenkins的常用功能» 下一篇:Jenkins学习四:Jenkins 邮件配置 posted @ 2015-03-25 16: ...

  7. 一.Jmeter+Ant+Jenkins搭建持续集成接口性能自动化测试

    微创新作品信息 1)微创新作品描述 A.为什么诞生: 1. 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换, ...

  8. Eclipce结合Ant进行编译、打包、传输、运行

    注意: 用Ant构建时,build path只能是单级的,如默认的src,如果是类似basePath/jsr253这样的话,运行Ant build时会报错,说找不到jsr253. (此文讲述的是以an ...

  9. ant 使用指南

    一.概述 ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发.在实际软件开发中,有很多地方可以用到ant. 开发环境: System:Windo ...

随机推荐

  1. VPN+NAT实现代理服务器功能

    前话 用VPN+NAT再结合路由可以实现很方便的代理功能,适用于有一台能方便连接Internet的电脑,其他不在同一子网内的电脑能够连接到这台机器但不能完全访问Internet.比如好些学校的校园网, ...

  2. SOA基础

    每个系统上都有多种业务逻辑,这就像在一个小超市中,一个人负责收银.清洁.摆货.咨询等各种各样的事情,当来超市的顾客多到一定程度,这个人就没办法再负责这么多的事情了,系统也同样如此. 第一个现象就是系统 ...

  3. python函数--传参

    一.位置参数 二.关键字参数 三.默认参数 四.任意数量的位置参数: 1. *x 2. 传入的多个参数,最终合并成一个元组 3. 之后的参数必须用关键字参数 五.任意数量的关键字参数 1. **x 2 ...

  4. python学习笔记二--列表的使用

    一.基本列表操作 1. 合并‘+’:左右两边必须均为列表 可以用str(),%,list()做类型的转换后再做合并 2. 重复‘*’: 3. 迭代和解析: x作为for循环里步进变量,由于列表是序列, ...

  5. C语言字符串函数

    strtok()     字符串分割函数strstr()     字符串查找函数 范例 #include <string.h> main() {     char * s = " ...

  6. poj 1062 昂贵的聘礼(最短路 dijk+枚举)

    终于A 了,这题做着真麻烦 题目:http://poj.org/problem?id=1062 dijk 一般用于正权有向图 此题的关键在于等级限制的处理,最好的办法是采用枚举,即假设酋长等级为5,等 ...

  7. poj1226,poj3080

    看来以后用pascal的函数要小心了: 简简单单pos其实时间复杂度是二次方级的…… 今天学习的是KMP——字符匹配算法: 这两道题也都很简单,都是为这个算法练手的, 最朴素的匹配显然是穷举起始位置然 ...

  8. BZOJ_1018_[SHOI2008]_交通堵塞traffic_(线段树)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1018 \(2*n\)的距形,起初没有边相连,之后有三种操作: 1.加边. 2.删边. 3.询问 ...

  9. 完全用xml实现imageview点击换一张图片

    <ImageView android:layout_width="60dp" android:layout_height="60dp" android:b ...

  10. Spring Data JPA初使用

    我们都知道Spring是一个非常优秀的JavaEE整合框架,它尽可能的减少我们开发的工作量和难度. 在持久层的业务逻辑方面,Spring开源组织又给我们带来了同样优秀的Spring Data JPA. ...