P1081-开车旅行【倍增,链表,dp】

正题

题目大意:https://www.luogu.org/problemnew/show/P1081


题目大意

有若干个城市有不同的海拔hhh,两个城市之间的距离定义为∣hx−hy∣|h_x-h_y|hxhy
小A每次走次近的,小B每次走最近的。它们轮流开车。且只会往编号更大的城市开。
问一:在距离≤X\leq XX的情况下求一个起点是的他们两个开的距离之和最小。
问二:若干个Si,XiS_i,X_iSi,Xi求在SiS_iSi出发,距离≤Xi\leq X_iXi时他们各开多远。


解题思路

首先链表(或平衡树)预处理出gaiga_igaigbigb_igbi表示在第iii个城市小AAA或小BBB下一个会到的城市。

然后考虑dpdpdp
fi,j,0/1f_{i,j,0/1}fi,j,0/1表示从jjj出发走了2i2^i2i次,到小A/小B开车,到达的地点。
dai,j,0/1da_{i,j,0/1}dai,j,0/1表示从jjj出发走了2i2^i2i次,到小A/小B开车,小AAA走了多远。
dbi,j,0/1db_{i,j,0/1}dbi,j,0/1表示从jjj出发走了2i2^i2i次,到小A/小B开车,小BBB走了多远。
然后首先
f0,j,0=gaj,f0,j,1=gbjf_{0,j,0}=ga_j,f_{0,j,1}=gb_jf0,j,0=gaj,f0,j,1=gbj
da0,j,0=dist(j,gaj),da0,j,1=0da_{0,j,0}=dist(j,ga_{j}),da_{0,j,1}=0da0,j,0=dist(j,gaj),da0,j,1=0
db0,j,1=dist(j,gbj),db0,j,0=0db_{0,j,1}=dist(j,gb_{j}),db_{0,j,0}=0db0,j,1=dist(j,gbj),db0,j,0=0
然后考虑转移
i=1i=1i=1
fi,j,k=fi−1,fi−1,j,k,kxor1f_{i,j,k}=f_{i-1,f_{i-1,j,k},k\ xor\ 1}fi,j,k=fi1,fi1,j,k,k xor 1
dai,j,k=dai−1,j,k+dai−1,fi−1,j,k,kxor1da_{i,j,k}=da_{i-1,j,k}+da_{i-1,f_{i-1,j,k},k\ xor\ 1}dai,j,k=dai1,j,k+dai1,fi1,j,k,k xor 1
dbi,j,k=dbi−1,j,k+dbi−1,fi−1,j,k,kxor1db_{i,j,k}=db_{i-1,j,k}+db_{i-1,f_{i-1,j,k},k\ xor\ 1}dbi,j,k=dbi1,j,k+dbi1,fi1,j,k,k xor 1
但是因为i>1i>1i>12i2^i2i依旧是偶数,说以kkk不需要改变
fi,j,k=fi−1,fi−1,j,k,kf_{i,j,k}=f_{i-1,f_{i-1,j,k},k}fi,j,k=fi1,fi1,j,k,k
dai,j,k=dai−1,j,k+dai−1,fi−1,j,k,kda_{i,j,k}=da_{i-1,j,k}+da_{i-1,f_{i-1,j,k},k}dai,j,k=dai1,j,k+dai1,fi1,j,k,k
dbi,j,k=dbi−1,j,k+dbi−1,fi−1,j,k,kdb_{i,j,k}=db_{i-1,j,k}+db_{i-1,f_{i-1,j,k},k}dbi,j,k=dbi1,j,k+dbi1,fi1,j,k,k

处理好之后,我们定义函数calc(s,x)calc(s,x)calc(s,x)表示
sss出发,且距离不超过xxx时小AAA和小BBB的行驶距离。

首先我们要设定now,la,lbnow,la,lbnow,la,lb表示现在在哪个点和小AAA和小BBB的行驶距离。

然后当la+lb+dai,now,0+dbi,now,0≤xla+lb+da_{i,now,0}+db_{i,now,0}\leq xla+lb+dai,now,0+dbi,now,0x时就证明可以行走,那就对应修改now,la,lbnow,la,lbnow,la,lb的值。


codecodecode

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#define ll long long
using namespace std;
const ll N=101000;
struct Node{ll h,id,prev,next;
}l[N];
set<int> BST;
double ans;
ll n,m,mark,la,lb,t;
ll h[N],f[21][N][2],da[21][N][2];
ll ga[N],gb[N],db[21][N][2],pre[N];
bool left(ll x){if(!l[x].prev) return 0;if(!l[x].next) return 1;return l[x].h-l[l[x].prev].h<=l[l[x].next].h-l[x].h;
}
ll cmps(ll a,ll b,ll x){if(!a) return l[b].id;if(!b) return l[a].id;if(l[x].h-l[a].h<=l[b].h-l[x].h) return l[a].id;return l[b].id;
}
bool cmp(Node x,Node y)
{return x.h<y.h;}
void Part1()
{for(ll i=1;i<=n;i++)l[i].h=h[i],l[i].id=i;sort(l+1,l+1+n,cmp);for(ll i=1;i<=n;i++)pre[l[i].id]=i;for(ll i=1;i<=n;i++)l[i].prev=i-1,l[i].next=i+1;l[1].prev=l[n].next=0;for(ll i=1;i<=n;i++){ll j=pre[i];if(left(j)) gb[i]=l[l[j].prev].id,ga[i]=cmps(l[l[j].prev].prev,l[j].next,j);else gb[i]=l[l[j].next].id,ga[i]=cmps(l[j].prev,l[l[j].next].next,j);l[l[j].prev].next=l[j].next;l[l[j].next].prev=l[j].prev;    }
}
ll dist(ll x,ll y)
{return abs(h[x]-h[y]);}
void Part2()
{for(ll j=1;j<=n;j++){if(ga[j]){f[0][j][0]=ga[j];da[0][j][0]=dist(j,ga[j]);db[0][j][0]=0;}if(gb[j]){f[0][j][1]=gb[j];da[0][j][1]=0;db[0][j][1]=dist(j,gb[j]);}}ll L=0;for(ll i=1;i<=t;i++)for(ll j=1;j<=n;j++)for(ll k=0;k<2;k++){if(i==1) L=k^1;else L=k;f[i][j][k]=f[i-1][f[i-1][j][k]][L];da[i][j][k]=da[i-1][j][k]+da[i-1][f[i-1][j][k]][L];db[i][j][k]=db[i-1][j][k]+db[i-1][f[i-1][j][k]][L];}
}
void calc(ll s,ll x)
{ll now=s;la=lb=0;for(ll i=t;i>=0;i--){if(f[i][now][0]&&la+lb+da[i][now][0]+db[i][now][0]<=x){la+=da[i][now][0];lb+=db[i][now][0];now=f[i][now][0];if(!now) break;}}
}
int main()
{scanf("%lld",&n);t=(int)(log(n*1.0)/log(2.0)+0.001);for(ll i=1;i<=n;i++)scanf("%lld",&h[i]);Part1();Part2();ll X;scanf("%lld",&X);ans=2147483647;for(ll i=1;i<=n;i++){calc(i,X);if(lb&&((double)la/lb)<ans) ans=(double)la/lb,mark=i;}printf("%lld\n",mark);scanf("%lld",&m);for(ll i=1;i<=m;i++){ll s;scanf("%lld%lld",&s,&X);calc(s,X);printf("%lld %lld\n",la,lb);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot之程序性能监控

转载自 Spring Boot之程序性能监控 Spring Boot特别适合团队构建各种可快速迭代的微服务&#xff0c;同时为了减少程序本身监控系统的开发量&#xff0c;Spring Boot提供了actuator模块&#xff0c;可以很方便的对你的Spring Boot程序做监控。 1. actuator接口说明 Spring B…

laravel部署在linux出现404 not found

laravel项目放在本地服务器后&#xff0c;访问是成功的 http://localhost/blogkjh/public/article 但是在linux服务器上访问显示404 not found 但是我在服务器上使用 php artisan serve --host 0.0.0.0 命令 却可以访问 甚至连swagger都可以访问 关于这个我最近就特别疑…

Visual Studio 2017 15.6版本预览,增加新功能

上周Visual Studio 2017 15.5 版本已正式发布&#xff0c;同时发布的还有 Visual Studio for Mac 7.3 。 Visual Studio 2017 15.6 版本预览&#xff0c;这个最新的预览包含新功能&#xff0c;生产力改进和其他增强功能&#xff0c;以解决客户的反馈意见。 本发行版中的更新摘要…

POJ1275-Cashier Employment【差分约束系统】

正题 题目链接:http://poj.org/problem?id1275 题目大意 1∼241\sim 241∼24小时中第iii个小时需要rir_iri​个出纳员 有nnn个人应聘&#xff0c;第iii从xix_ixi​开始工作&#xff0c;一直工作8个小时。 求至少要招募多少人应聘。 解题思路 numinum_inumi​表示第iii个小时有…

使用 mono 编译 .NET Standard 应用

微软发布 .NET Standard 2.0 已经有一段时间了&#xff0c; 根据 .NET Standard 2.0 支持版本的文档&#xff0c; Mono 5.4 是支持 .NET Standard 2.0 的&#xff0c; 对于 .NET Standard 2.0 应用的开发的介绍&#xff0c; 几乎全部都是在 Windows 系统下使用 Visual Studio 2…

nginx操作命令

启动 nginx 停止 nginx -s stop 查看占用端口号 ps -ef | grep nginx 重启&#xff1a; nginx -s reload nginx配置目录&#xff1a; /usr/local/nginx/conf/nginx.conf

Spring Boot 热部署入门

转载自 Spring Boot 热部署入门 1. 概述 在日常开发中&#xff0c;我们需要经常修改 Java 代码&#xff0c;手动重启项目&#xff0c;查看修改后的效果。如果在项目小时&#xff0c;重启速度比较快&#xff0c;等待的时间是较短的。但是随着项目逐渐变大&#xff0c;重启的速…

hdu3666-THE MATRIX PROBLEM【差分约束,自然对数】

正题 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid3666 题目大意 一个n∗mn*mn∗m的矩阵CCC求有没有一个长度为nnn的aaa序列和一个长度为mmm的bbb序列使得 L≤Ci,j∗ai/bi≤RL\leq C_{i,j}*a_i/b_i\leq RL≤Ci,j​∗ai​/bi​≤R 解题思路 首先我们将乘除转换为自然…

微服务架构的理论基础 - 康威定律

摘要&#xff1a; 可能出乎很多人意料之外的一个事实是&#xff0c;微服务很多核心理念其实在半个世纪前的一篇文章中就被阐述过了&#xff0c;而且这篇文章中的很多论点在软件开发飞速发展的这半个世纪中竟然一再被验证&#xff0c;这就是康威定律。前段时间看了Mike Amundsen…

nginx部署laravel需要修改的配置

让ssh一直在后台运行 nohup php artisan serve --host 0.0.0.0 > myout.file 2>&1 & 1、修改nginx.config里面的内容&#xff0c;把禁用函数去掉 2、修改php.ini display_errors Ondisplay_startup_errors On

阿里微服务架构下分布式事务Seata

转载自 阿里微服务架构下分布式事务Seata Seata 是什么&#xff1f; Seata 是一款开源的分布式事务解决方案&#xff0c;致力于在微服务架构下提供高性能和简单易用的分布式事务服务。在 Seata 开源之前&#xff0c;Seata 对应的内部版本在阿里经济体内部一直扮演着分布式一…

用于.NET Core的ORM

尽管EF Core正努力提供视图和存储过程等基本数据库特性&#xff0c;但是开发人员也在寻求能满足他们数据访问需求的ORM工具。下面列出一些相对广为使用的ORM。 LLBLGen Pro Runtime Framework LLBLGen Pro Runtime Framework是一种“可选”的ORM&#xff0c;它是与LLBLGen实体建…

P3076,jzoj3187-的士【贪心】

正题 luogu题目链接:https://www.luogu.org/problemnew/show/P3076 题目大意 有若干个请求si,tis_i,t_isi​,ti​表示一个牛要从sis_isi​到tit_iti​。一辆只能装一只牛的车&#xff0c;从1出发mmm结束。求最少行驶距离。 解题思路 首先对于每个要求一定要计算∣ti−si∣|t…

Spring Boot之基于Dubbo和Seata的分布式事务解决方案

转载自 Spring Boot之基于Dubbo和Seata的分布式事务解决方案 1. 分布式事务初探 一般来说&#xff0c;目前市面上的数据库都支持本地事务&#xff0c;也就是在你的应用程序中&#xff0c;在一个数据库连接下的操作&#xff0c;可以很容易的实现事务的操作。但是目前&#xff…

Ocelot监控

网关的作用之一&#xff0c;就是有统一的数据出入口&#xff0c;基于这个功能&#xff0c;我们可以在网关上配置监控&#xff0c;从而把所有web服务的请求应答基本数据捕获并展显出来。 关于web的监控&#xff0c;一般的做法是采集数据并保存&#xff0c;然后通过图表的方式展示…

jzoj3188-找数【质数筛,数论】

正题 题目大意 求第nnn大的最小质因数时ppp的数。 解题思路 首先对于p2p2p2和p3p3p3时可以直接通过计算得出。 然后不难发现当p5p5p5时我们可以每次增加101010也就是O(n)O(n)O(n)的十分之一常数。 之后再往大的我们发现是O(nln⁡np)O(\frac{n\ln n}{p})O(pnlnn​)常数是二分之…

Linux上安装nginx

1、下载安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel2、下载并解压nginx wget http://nginx.org/download/nginx-1.13.7.tar.gz tar -xvf nginx-1.13.7.tar.g3、进入到目录编译安装 ./configure make make install配置环境变量 修改 /etc…

Spring Boot之基于Redis实现MyBatis查询缓存解决方案

转载自 Spring Boot之基于Redis实现MyBatis查询缓存解决方案 1. 前言 MyBatis是Java中常用的数据层ORM框架&#xff0c;笔者目前在实际的开发中&#xff0c;也在使用MyBatis。本文主要介绍了MyBatis的缓存策略、以及基于SpringBoot和Redis实现MyBatis的二级缓存的过程。实现本…

数据库架构演变概要

一&#xff0e;背景为了适应业务增长,数据库数据量快速增长&#xff0c;性能日趋下降&#xff0c;稳定性不佳的实际情况&#xff0c;急需架构逐步演变适应未来的业务发展。二&#xff0e;现状【稳定性】数据库为单点&#xff0c;没有高可用和稳定性方案。【数据量大】数据库目前…

jzoj3189-解密【字符串hash】

正题 题目大意 一个句子有多个单词。 给出了一个加密了的串。加密方法是将不同的单词转换成不同的单词。然后再给一个加密前的串&#xff0c;求再加密串中可能出现的最早位置。 解题思路 设aia_iai​表示与iii相同的前一个字母的位置。 然后根据题目意思对与两个串如果aaa序列…