题意:

你有一个机器人,这个机器人在一维坐标轴上移动。你可以给这个机器人下达指令,指令的形式为 \(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. 改进你的c#代码的5个技巧(四)

    像每一篇文章一样,我会重复几行.我在我的Core i3 CPU.4GB主内存和Windows 7平台上测试了以下代码.如果你在不同的硬件配置或使用不同的平台,那么你的输出可能会随着我的输出屏幕而变化, ...

  2. LeetCode897. 递增顺序查找树

    题目 法一.自己 1 class Solution { 2 public: 3 vector<int>res; 4 TreeNode* increasingBST(TreeNode* ro ...

  3. 攻防世界 - Web(三)

    PHP2: 1.进入页面,进行抓包或后台扫描都没有什么发现,然后网上查一波wp,发现是关于.phps文件,进入index.phps,弹出一段代码,查看源代码, <?php if("ad ...

  4. 基于kubernetes实现coredns的及验证

    CoreDNS:  k8s内部的DNS ,用于对pod对service做记录的,好让其他的pod做访问 这里不用做过多的阐述 官方kube-dns现在已经没有在维护了,从Kubernetes 1.11 ...

  5. gRPC Load Balancing

    gRPC Load Balancing 翻译自:https://grpc.io/blog/grpc-load-balancing/ 这是gRPC负载均衡的第一篇,后续会给出基于golang XDS服务 ...

  6. Android事件分发机制五:面试官你坐啊

    前言 很高兴遇见你~ 事件分发系列文章已经到最后一篇了,先来回顾一下前面四篇,也当个目录: Android事件分发机制一:事件是如何到达activity的? : 从window机制出发分析了事件分发的 ...

  7. ACID 原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。

    https://en.wikipedia.org/wiki/ACID https://zh.wikipedia.org/wiki/ACID //ACID compliant , row-level l ...

  8. (Sql Server)存储过程(转载)

    SQL Server 存储过程 Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这 ...

  9. 静电、浪涌与TVS

    ESD和浪涌问题往往是基带工程师最头疼的问题,因为测试标准严苛,问题神出鬼没.特别是ESD问题,没有解决问题的标准路径,只能靠反复地构思方案并验证.想要尽量避免以上问题,就必须选择合适的防护器件,设计 ...

  10. HTML5 学习表格应用

    <table> <tr> ---tr 定义行 <td>第1个单元格的内容</td> ----td 定义列 <td>第2个单元格的内容< ...