洛谷【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 不够 没有取 ...
随机推荐
- 线段覆盖 2(序列DP)
Code vs 3027 线段覆盖 2 题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~1000000,每条线段有一个价值,请从n条线段中挑出若干条线段, ...
- PBR探索
原理 根据能量守恒,以及一系列光照原理得出微表面BRDF(Bidirectional Reflectance Distribution Function)公式 // D(h) F(v,h) G(l,v ...
- Linux安装Nignx基于域名的多虚拟主机实战
看这个文章之前,要保证你的Nginx已经安装成功! 如果没有,请移步到下面这个文章,看完后再回来看! https://www.cnblogs.com/apollo1616/p/10214531.htm ...
- Android系统移植与调试之------->MTK 标准编译命令
命令格式:./maketek [option] [project] [action] [modules]Option: -t ,-tee :输出log信息到当前终端 -o , -opt=-- ...
- 使用javascript的eval函数解析json字符串,提示“not avalible”怎么办?
按照最简单的形式,可以用下面这样的 JSON 表示"名称 / 值对": var jsonString = '{ "firstName": "Brett ...
- Java实现微信网页授权
开发前的准备: 1.需要有一个公众号(我这里用的测试号),拿到AppID和AppSecret: 2.进入公众号开发者中心页配置授权回调域名.具体位置:接口权限-网页服务-网页账号-网页授权获取用户基本 ...
- MVC ViewBag不能使用在工程文件中添加引用
在工程文件中 <ItemGroup> // ... </ItemGroup> 添加引用 <Reference Include="Microsoft.CSharp ...
- Elasticsearch for python API模块化封装
Elasticsearch for python API模块化封装 模块的具体功能 检测Elasticsearch节点是否畅通 查询Elasticsearch节点健康状态 查询包含的关键字的日志(展示 ...
- CSS3分享按钮动画特效
在线演示 本地下载
- Android系统定制之SystemUI修改:下拉通知栏尺寸【转】
本文转载自:https://blog.csdn.net/huil0925/article/details/67632358 最近项目需要修改下拉通知栏面板的宽度,完成后,写个Blog做个总结,也提供给 ...