题意:

你有一个机器人,这个机器人在一维坐标轴上移动。你可以给这个机器人下达指令,指令的形式为 \(t_i, x_i\) ,意味着机器人在第\(t_i\)秒的时候获得一条指令,此时这个机器人以\(1/s\)的速度从现在的位置开始向\(x_i\)移动。若机器人执行当前指令的过程中收到其他命令,那么其他命令会被忽略。

现在问你给出的指令中被成功执行的命令有几条,被成功执行的命令的定义并不是字面意义上的成功之行,题目给出的成功之行命令的条件为:

假设当前命令为 \(t_i, x_i\) , 若机器人在 \(t_i\) 到 \(t_{i+1}\)这个时间区间(包括边界)内到达过 \(x_i\) 这个位置,则称这条命令被成功执行。

对于最后一条命令 \(t_n, x_n\) ,我们认为有一个\(t_{n+1}=∞\) 。

思路:

从第一条命令开始,我们记录它的起始时间 \(start\_time\) ,结束时间 \(end\_time\) ,之后排着扫命令:

  • 若命令的\(t_i\) 小于\(start\_end\) , 那么就算出 \(t_i\) 时机器人的位置和 \(min(t_{i+1}, end\_time)\) 时机器人的位置,若 \(x_i\) 在这个区间内,那么这条命令就算被成功执行了;

  • 若命令的 \(t_i\) 大于等于 \(start\_time\) , 那么就更新\(start\_time\) 和 \(end_time\) 。

本题有一些处理上的小技巧,可以在代码中看到。

此外这道题个地方需要注意:题目里说的认为有一个 \(t_{n+1}=∞\) , 这里我最开始的代码无穷取了 \(0x3F3F3F3F\) , 但是这里无穷取这个值会出问题,因为他的范围是从 \(-10^9 <= x_i <= 10^9\), 若数据给了从最左边到最右边是最后一个指令,那么取这个值会导致它不能走到最右边。(这个地方卡了我一下午。。)

AC代码:

#include <cstdio>
#include <algorithm> typedef long long ll; const int maxn = 1e5 + 5;
const ll inf = 0x3f3f3f3f3f3f3f3f; struct node {
ll t, p;
}a[maxn]; int main () {
int T, n;
scanf ("%d", &T);
while (T--) {
scanf ("%d", &n);
for (int i = 0; i < n; i++) {
scanf ("%lld %lld", &a[i].t, &a[i].p);
}
a[n].t = inf;
ll start_pos = 0;
ll end_pos = 0;
ll start_time = 0;
ll end_time = -1;
ll dir = 0;
int ans = 0;
for (int i = 0; i < n; i++) {
if (a[i].t >= end_time) {
start_pos = end_pos;
end_pos = a[i].p;
start_time = a[i].t;
end_time = start_time + std::abs(a[i].p - start_pos);
dir = (a[i].p - start_pos) == 0 ? 0 : (a[i].p - start_pos) / std::abs(a[i].p - start_pos);
}
ll s = start_pos + (a[i].t - start_time) * dir;
ll t = start_pos + (a[i + 1].t - start_time) * dir;
if (a[i + 1].t > end_time) {
t = end_pos;
}
if (s > t) std::swap (s, t);
if (a[i].p >= s && a[i].p <= t) {
ans++;
}
}
printf ("%d\n", ans);
}
return 0;
}

CF1463-C. Busy Robot的更多相关文章

  1. ORA-00054: resource busy and acquire with NOWAIT specified

    删除表时遇到 ORA-00054:资源正忙,要求指定NOWAIT 错误.以前在灾备中心遇到过. 资源被锁定了,没有办法删除. 报错日志:ORA-00054: resource busy and acq ...

  2. Robot Framework用户手册 (版本:3.0)

    版权信息:诺基亚网络和解决中心 本翻译尊重原协议,仅用于个人学习使用 1.开始: 1.1 介绍: Robot Framework是一个基于Python的,为终端测试和验收驱动开发(ATDD)的可扩展的 ...

  3. selenium webdriver 右键另存为下载文件(结合robot and autoIt)

    首先感谢Lakshay Sharma 大神的指导 最近一直在研究selenium webdriver右键菜单,发现selenium webdriver 无法操作浏览器右键菜单,如图 如果我想右键另存为 ...

  4. RIDE -- Robot Framework setup

    RobotFramework 是一款基于python 的可以实现关键字驱动和数据驱动并能够生成比较漂亮的测试报告的一款测试框架 这里使用的环境是 python-2.7.10.amd64.msi RID ...

  5. [8.2] Robot in a Grid

    Imagine a robot sitting on the upper left corner of grid with r rows and c columns. The robot can on ...

  6. Coping with the TCP TIME-WAIT state on busy Linux servers

    Coping with the TCP TIME-WAIT state on busy Linux servers 文章源自于:https://vincent.bernat.im/en/blog/20 ...

  7. Robot Framework自动化测试 ---视频与教程免费分享

    当我第一次使用Robot Framework时,我是拒绝的.我跟老大说,我拒绝其实对于习惯了代码的自由,所以讨厌这种“填表格”式的脚本.老大说,Robot Framework使用简单,类库丰富,还可以 ...

  8. shell脚本执行时报"bad interpreter: Text file busy"的解决方法

    在执行一个shell脚本时,遇到了“-bash: ./killSession.sh: /bin/bash: bad interpreter: Text file busy”错误提示,如下所示: [or ...

  9. robot创建桌面图标(转载)

    桌面ride图标,安装之后会自动创建(偶尔也会创建失败),创建桌面图标方法如下: 1. 新建快捷方式 在桌面右击鼠标,弹出的菜单选择 新建-快捷方式 ,然后在"请键入对象"的位置输 ...

随机推荐

  1. /etc/hosts文件

    这个文件告诉主机哪些域名对应哪些ip,哪些主机名对应哪些ip. 一般也三个域 网络ip地址 主机名或域名 主机名别名 两部分的时候 主机ip地址和主机名

  2. 【Linux】ntp的一些坑。你肯定遇到过

    ntpdate提示 19 Jan 10:33:11 ntpdate[29616]: no server suitable for synchronization found 这种问题从下面几个点开始验 ...

  3. 【Oracle】如果有一个Oracle中的用户,想知道他有什么权限,怎么查看?

    假如那到了一个新用户,test,想查看这test的所有权限都有哪些,可以这么操作 登录到test用户上,执行下面的SQL 1.查看test用户被赋予了哪些角色. select * from user_ ...

  4. ctfshow—web—web6

    打开靶机 发现登录窗,首先想到SQL注入 抓包,进行SQL注入测试 测试发现空格符被过滤了 使用/**/代替空格符进行绕过,绕过后登录成功 检测回显位 开始查询数据库名 开始查询数据库内数据表名称 查 ...

  5. 如何在 crontab 中让 source ~/.bashrc 生效

    cron 是许多类 Unix 操作系统中都自带的用来调度定时任务的工具,定时任务的配置是写在 crontab 文件中的,但是 crontab 文件不允许直接编辑,一般都是通过命令 crontab -e ...

  6. JVM重新认识(一)oop-klass模型--HSDB使用验证

    一:oop-kclass模型 思考:我们平时写的java类编译成.class文件,JVM加载.class文件,那么加载.class文件之后在JVM中就是oop-kclass(C++)模型形式存在的. ...

  7. elasticsearch从开始到永久

    0.学习目标 独立安装Elasticsearch 会使用Rest的API操作索引 会使用Rest的API查询数据 会使用Rest的API聚合数据 掌握Spring Data Elasticsearch ...

  8. a.default.ERROR.httpAjax is not a function

    原因1: 使用的是jQuery的slim构建,它删除了一些东西,ajax就是其中之一. 解决方法: 在此处下载常规(压缩或非压缩)版本的jQuery并将其包含在您的项目中. 原因2: 使用其他库引起了 ...

  9. 解决键冲突 — Redis 设计与实现 https://redisbook.com/preview/dict/collision_resolution.html

    解决键冲突 - Redis 设计与实现 https://redisbook.com/preview/dict/collision_resolution.html

  10. Go Concurrency Patterns: Context At Google, we require that Go programmers pass a Context parameter as the first argument to every function on the call path between incoming and outgoing requests.

    小结: 1. Background is the root of any Context tree; it is never canceled: 2.     https://blog.golang. ...