CF1463-C. Busy Robot

题意:

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

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

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

对于最后一条命令 t n , x n t_n, x_n tn​,xn​ ,我们认为有一个 t n + 1 = ∞ t_{n+1}=∞ tn+1​=∞ 。

思路:

从第一条命令开始,我们记录它的起始时间 s t a r t _ t i m e start\_time start_time ,结束时间 e n d _ t i m e end\_time end_time ,之后排着扫命令:

  • 若命令的 t i t_i ti​ 小于 s t a r t _ e n d start\_end start_end , 那么就算出 t i t_i ti​ 时机器人的位置和 m i n ( t i + 1 , e n d _ t i m e ) min(t_{i+1}, end\_time) min(ti+1​,end_time) 时机器人的位置,若 x i x_i xi​ 在这个区间内,那么这条命令就算被成功执行了;

  • 若命令的 t i t_i ti​ 大于等于 s t a r t _ t i m e start\_time start_time , 那么就更新 s t a r t _ t i m e start\_time start_time 和 e n d t i m e end_time endt​ime 。

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

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

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. CodeForces 1463 C. Busy Robot 模拟

    CodeForces 1463 C. Busy Robot 模拟 题目大意: 有一个一维坐标轴,在最初时刻有个机器人位于坐标 0 0 0 位置,有 n n n 个命令,对于每一个命令在 t i t_i ...

  2. Educational Codeforces Round 100 A—D题题解

    A. Dungeon 题目传送门: A. Dungeon 题目大意: 三个怪物具有a,b,c的血量,每发射一次炮弹,会对一个怪物造成一点伤害.每发射6次之后,第7次就是蓄力炮,对三个怪物同时造成一点伤 ...

  3. Educational Codeforces Round 100 (Rated for Div. 2)

    文章目录 Educational Codeforces Round 100 (Rated for Div. 2) A. Dungeon B. Find The Array C. Busy Robot ...

  4. Educational Codeforces Round 100 (Rated for Div. 2)补题记录

    总结:感觉这个educational场好难啊(蒟蒻视角),又被虐了,唉 A. Dungeon 每一枪会造成1点伤害对一个单位,但是当开7的倍数枪时会造成3点伤害 每7次一个轮回,一个完整的轮回共造成9 ...

  5. ASP.NET性能调整之解决Server Too Busy错误

    最近公司的一个ASP.NET站点频繁出现Server Too Busy错误,具体表现为页面响应慢.经常出现Server Too Busy异常:但实际上服务器的资源消耗却很低,CPU使用只有10%左右, ...

  6. java openfile busy_android java.io.IOException: open failed: EBUSY (Device or resource busy)

    今天遇到一个奇怪的问题, 测试在程序的下载界面,下载一个文件第一次下载成功,删除后再下载结果下载报错, 程序:file.createNewFile(); 报错:java.io.IOException: ...

  7. 【VritualBox】虚拟机VirtualBox中ubuntu下加载USB设备报错:busy with a previous request.Plaease try again later

    1.问题描述 在VirtualBox中添加USB设备时,报错: USB device with 'SanDisk Crurer Blade'UUID {*} is busy with a previo ...

  8. Robot Framework(十八) 支持工具

    5支持工具 5.1库文档工具(libdoc) libdoc是一种用于为HTML和XML格式的测试库和资源文件生成关键字文档的工具.前一种格式适用于人类,后者适用于RIDE和其他工具.Libdoc也没有 ...

  9. Java Robot对象实现服务器屏幕远程监视

    Java Robot对象实现服务器屏幕远程监视2006-01-16 17:33 作者: xiepan110 出处: BLOG 责任编辑:方舟 摘要: 有时候,在Java应用程序开发中,如:远程监控或远 ...

最新文章

  1. 需要反射时使用dynamic
  2. CSS定位布局display/float/position属性之间的关系/区别和如何使用取值行为机制
  3. 一文看懂Python(五)-----文件篇
  4. FormatUtil
  5. 【算法】 - 滑动窗口
  6. 黑苹果 wifi android,动动手指零负担让你的黑苹果连上Wifi
  7. 计算机培训三下乡实践报告,暑期“三下乡”社会实践心得体会范文
  8. 田字格怎么用C语言编写程序,怎么写算法设计
  9. 十八、vim进入编辑模式、vim命令模式、vim实践
  10. eclipse安装包
  11. 半导体物理 第七章 金属半导体接触整流理论
  12. 阿里云服务器配置redis5
  13. unity5 rendersetting选项
  14. ios android 比较大小,对比苹果iOS,安卓7.0的七个优点
  15. SQLMAP-POST注入
  16. narx神经网络 matlab,神经网络 NARX
  17. 米赛尔java火_山地自行车推荐 这几款山地自行车值得入手
  18. 图像拼接(十一):双摄像头实时拼接+stitching_detailed
  19. 疯狂Java讲义(七)----第二部分
  20. 安霸CV1 SOC芯片

热门文章

  1. glib linux,[转载]linux下glib.h的介绍
  2. Intel 9代CPU自砍鸡肋:全新酷睿给力到家
  3. 记一个简单Android图书阅读器的制作过程
  4. purifier 常用配置 保留 id 和 iframe
  5. H5--大概的,没事看看
  6. 破解rar、zip、7z压缩包加密
  7. MyBatis(二)—— 进阶
  8. Visual C++中的AFX前缀
  9. 使用JS创建条形码在线生成工具-toolfk.com
  10. 摩拜免押金是在阿里的哈罗猛烈攻击下的应对举措