CF1463-C. Busy Robot
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 endtime 。
本题有一些处理上的小技巧,可以在代码中看到。
此外这道题个地方需要注意:题目里说的认为有一个 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相关推荐
- CodeForces 1463 C. Busy Robot 模拟
CodeForces 1463 C. Busy Robot 模拟 题目大意: 有一个一维坐标轴,在最初时刻有个机器人位于坐标 0 0 0 位置,有 n n n 个命令,对于每一个命令在 t i t_i ...
- Educational Codeforces Round 100 A—D题题解
A. Dungeon 题目传送门: A. Dungeon 题目大意: 三个怪物具有a,b,c的血量,每发射一次炮弹,会对一个怪物造成一点伤害.每发射6次之后,第7次就是蓄力炮,对三个怪物同时造成一点伤 ...
- 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 ...
- Educational Codeforces Round 100 (Rated for Div. 2)补题记录
总结:感觉这个educational场好难啊(蒟蒻视角),又被虐了,唉 A. Dungeon 每一枪会造成1点伤害对一个单位,但是当开7的倍数枪时会造成3点伤害 每7次一个轮回,一个完整的轮回共造成9 ...
- ASP.NET性能调整之解决Server Too Busy错误
最近公司的一个ASP.NET站点频繁出现Server Too Busy错误,具体表现为页面响应慢.经常出现Server Too Busy异常:但实际上服务器的资源消耗却很低,CPU使用只有10%左右, ...
- java openfile busy_android java.io.IOException: open failed: EBUSY (Device or resource busy)
今天遇到一个奇怪的问题, 测试在程序的下载界面,下载一个文件第一次下载成功,删除后再下载结果下载报错, 程序:file.createNewFile(); 报错:java.io.IOException: ...
- 【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 ...
- Robot Framework(十八) 支持工具
5支持工具 5.1库文档工具(libdoc) libdoc是一种用于为HTML和XML格式的测试库和资源文件生成关键字文档的工具.前一种格式适用于人类,后者适用于RIDE和其他工具.Libdoc也没有 ...
- Java Robot对象实现服务器屏幕远程监视
Java Robot对象实现服务器屏幕远程监视2006-01-16 17:33 作者: xiepan110 出处: BLOG 责任编辑:方舟 摘要: 有时候,在Java应用程序开发中,如:远程监控或远 ...
最新文章
- 需要反射时使用dynamic
- CSS定位布局display/float/position属性之间的关系/区别和如何使用取值行为机制
- 一文看懂Python(五)-----文件篇
- FormatUtil
- 【算法】 - 滑动窗口
- 黑苹果 wifi android,动动手指零负担让你的黑苹果连上Wifi
- 计算机培训三下乡实践报告,暑期“三下乡”社会实践心得体会范文
- 田字格怎么用C语言编写程序,怎么写算法设计
- 十八、vim进入编辑模式、vim命令模式、vim实践
- eclipse安装包
- 半导体物理 第七章 金属半导体接触整流理论
- 阿里云服务器配置redis5
- unity5 rendersetting选项
- ios android 比较大小,对比苹果iOS,安卓7.0的七个优点
- SQLMAP-POST注入
- narx神经网络 matlab,神经网络 NARX
- 米赛尔java火_山地自行车推荐 这几款山地自行车值得入手
- 图像拼接(十一):双摄像头实时拼接+stitching_detailed
- 疯狂Java讲义(七)----第二部分
- 安霸CV1 SOC芯片