洛谷【P3407】散步
我对状态空间的理解:https://www.cnblogs.com/AKMer/p/9622590.html
题目传送门:https://www.luogu.org/problemnew/show/P3407
虽然这道题值域范围很大,但是\(n\)还在可以接受的范围。
我们灵性的理解一下,如果一个人运气不好,碰不到其他人,他将一直走下去。所以我们就可以在\(O(1)\)的时间内算出他最后的位置。
我们再灵性的想一下,如果一个人碰到了人群,那么他就将停止走路,在人群中一起聊天。
人群个数不会超过\(n/2\),这很显然对吧。我们只要掌握每一个会形成人群的点,就可以算出所有人最后的位置了。
然后某两个人可以碰到一起当且仅当\(i\)号人向东走且\(i+1\)号人向西走,\(pos[i+1]-pos[i]\leqslant2*T\),那样就会在\(pos[i]+(pos[i+1]-pos[i])/2\)的地方形成人群。这时我们再去更新上一个人群到这一个人群中向东走的人的答案,因为新人群的出现只会影响这满足上述条件的人。然后向西走的就直接算会不会走到上一个人群里,不会的话就直接走,会的话上一个人群的位置就是他最后的位置。
时间复杂度:\(O(n)\)
空间复杂度:\(O(n)\)
代码如下:
#include <cstdio>
#include <algorithm>
using namespace std;
#define ll long long
const int maxn=1e5+5;
int di[maxn];//记录每个人的方向
int n,Q,now=1;//now是上一个人群后的第一个人的标号
ll T,lst=-3e18;//T记录时间,lst记录上一个人群的位置
ll pos[maxn],POS[maxn];//pos记录初始位置,POS记录最后位置
int main() {
scanf("%d%lld%d",&n,&T,&Q);
for(int i=1;i<=n;i++)
scanf("%lld%d",&pos[i],&di[i]);//读入
for(int i=1;i<=n;i++) {
if(di[i]==2) POS[i]=max(pos[i]-T,lst);//如果是向西走那么直接对pos[i]-T,lst取max
else {
POS[i]=pos[i]+T;//我不管最终位置是啥,先放到pos[i]+T再说。到时候形成新人群了会回过头来更新
if(di[i+1]==2&&pos[i+1]-pos[i]<=2*T) {//如果会形成新人群
lst=pos[i]+(pos[i+1]-pos[i])/2;//更新人群位置
while(now<i+2) {
if(di[now]==1)POS[now]=min(pos[now]+T,lst);
now++;//把上一个人群到当前人群间所有向东走的人的答案都试着更新一遍。
}
}
}
}
for(int i=1;i<=Q;i++) {
int x;scanf("%d",&x);
printf("%lld\n",POS[x]);
}
return 0;
}
洛谷【P3407】散步的更多相关文章
- 洛谷P3407 散步[分组]
题目描述 一条道路上,位置点用整数A表示. 当A=0时,有一个王宫.当A>0,就是离王宫的东边有A米,当A<0,就是离王宫的西边有A米. 道路上,有N个住宅从西向东用1-N来标号.每个住宅 ...
- 洛谷P1294 高手去散步
洛谷1294 高手去散步 题目背景 高手最近谈恋爱了.不过是单相思.“即使是单相思,也是完整的爱情”,高手从未放弃对它的追求.今天,这个阳光明媚的早晨,太阳从西边缓缓升起.于是它找到高手,希望在晨读开 ...
- 「 洛谷 」P2151 [SDOI2009]HH去散步
小兔的话 欢迎大家在评论区留言哦~ HH去散步 题目限制 内存限制:125.00MB 时间限制:1.00s 标准输入 标准输出 题目知识点 动态规划 \(dp\) 矩阵 矩阵乘法 矩阵加速 矩阵快速幂 ...
- 洛谷P1972 [SDOI2009]HH的项链 题解
[SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不 ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.
没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷P1710 地铁涨价
P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交 讨论 题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...
- 洛谷P1371 NOI元丹
P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交 讨论 题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...
随机推荐
- Bag of mice(概率DP)
Bag of mice CodeForces - 148D The dragon and the princess are arguing about what to do on the New Y ...
- EasyNVR流媒体直播之:零基础实现摄像头的全平台直播 (二)公网直播的实现
接上回(https://blog.csdn.net/xiejiashu/article/details/81276870),我们实现内网直播,可以实现直播的web观看,该篇博文我们将实现公网的直播. ...
- ibatis中井号跟美元符号区别(#.$)
1.#可以进行预编译,进行类型匹配,#变量名# 会转化为 jdbc 的 类型 $不进行数据类型匹配,$变量名$就直接把 $name$替换为 name的内容 例如: select * from tabl ...
- Frobenius Norm
http://mathworld.wolfram.com/FrobeniusNorm.html
- Javascript对数组的操作--转载
在jquery中处理JSON数组的情况中遍历用到的比较多,但是用添加移除这些好像不是太多. 今天试过json[i].remove(),json.remove(i)之后都不行,看网页的DOM对象中好像J ...
- 【python】-- 多进程的基本语法 、进程间数据交互与共享、进程锁和进程池的使用
多进程 进程之间是相互独立的,python是启动进程的时候,是启动的是原生进程.进程是没有GIL锁的,而且不存在锁的概念,进程之间的数据式不能共享的,而线程是可以的. 1.进程的定义 用mulipro ...
- Python菜鸟之路:Python基础(三)
一.编码 推荐阅读<字符编码的前世今生>:http://tgideas.qq.com/webplat/info/news_version3/804/808/811/m579/201307/ ...
- JS表单提交
测试一: function submit(){var form1=document.getElementById("form1")form1.action="/manag ...
- 从 零开始 无差错 装好nginx+PHP
由于这两天 一直有人追问 nginx为何报错,为何php没装好啥的,大多原因是 : 1.编译与yum混合安装,导致很多包的路径不对,进而报错 2.yum源比较旧,导致 与新版本的php不匹配 3.安装 ...
- Apache Shiro 使用手册(四)Realm 实现(转发:http://kdboy.iteye.com/blog/1169631)
在认证.授权内部实现机制中都有提到,最终处理都将交给Real进行处理.因为在Shiro中,最终是通过Realm来获取应用程序中的用户.角色及权限信息的.通常情况下,在Realm中会直接从我们的数据源中 ...