【NOIP2012】旅行计划

 

题解

双向链表加倍增。。。

正写着不一定能写对2333

 

终于写对了。。。

然而我的双向链表和别人的都不一样。。。

瑟瑟发抖。。。

代码

 

//by 减维
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<map>
#include<algorithm>
#define ll long long
#define inf (9223372036854775807LL)
using namespace std;struct biao{int i,to,fr;ll v;
}e[100005];int n,m,hest,ys[100005],zj[100005],cj[100005],f[100005][33];
ll x,her,a[100005][33],b[100005][33],h[100005];bool cmp(const biao&x,const biao&y){return x.v>y.v;}
bool cm2(const biao&x,const biao&y){return x.i<y.i;}int main()
{scanf("%d",&n);for(int i=1;i<=n;++i){scanf("%lld",&e[i].v),e[i].i=i,h[i]=e[i].v;if(h[i]>her) her=h[i],hest=i;}sort(e+1,e+n+1,cmp);for(int i=1;i<=n;++i)e[i].fr=e[i-1].i,e[i].to=e[i+1].i;sort(e+1,e+n+1,cm2);for(int i=1;i<=n;++i){ll m1=inf,m2=inf,hh[5];int pos[5],a1,a2;hh[1]=abs(h[i]-h[e[i].fr]);                    pos[1]=e[i].fr;hh[2]=abs(h[i]-h[e[e[i].fr].fr]);              pos[2]=e[e[i].fr].fr;hh[3]=abs(h[i]-h[e[i].to]);                    pos[3]=e[i].to;hh[4]=abs(h[i]-h[e[e[i].to].to]);           pos[4]=e[e[i].to].to;if(e[i].fr==0)hh[1]=inf;if(e[e[i].fr].fr==0)hh[2]=inf;if(e[i].to==0)hh[3]=inf;if(e[e[i].to].to==0)hh[4]=inf;for(int j=1;j<=4;++j)if(m1>hh[j]||(m1==hh[j]&&h[a1]>h[pos[j]]))m2=m1,a2=a1,m1=hh[j],a1=pos[j];elseif(m2>hh[j]||(m2==hh[j]&&h[a2]>h[pos[j]]))m2=hh[j],a2=pos[j];if(m1!=inf)zj[i]=a1;if(m2!=inf)cj[i]=a2;if(e[i].fr!=0)e[e[i].fr].to=e[i].to;if(e[i].to!=0)e[e[i].to].fr=e[i].fr;}for(int i=1;i<=n;++i){f[i][0]=zj[cj[i]];if(i<=n-2)a[i][0]=abs(h[i]-h[cj[i]]);if(i<=n-1)b[i][0]=abs(h[cj[i]]-h[zj[cj[i]]]);}for(int i=1;i<=22;++i)for(int j=1;j<=n;++j){f[j][i]=f[f[j][i-1]][i-1];a[j][i]=a[j][i-1]+a[f[j][i-1]][i-1];b[j][i]=b[j][i-1]+b[f[j][i-1]][i-1];}scanf("%lld",&x);int ans=1;double m1=inf;ll mh=-1;for(int i=1;i<=n;++i){int pos=i;ll l=x,disa=0,disb=0;for(int j=22;j>=0;--j){if(f[pos][j]!=0&&a[pos][j]+b[pos][j]<=l){disa+=a[pos][j];disb+=b[pos][j];l-=a[pos][j]+b[pos][j];pos=f[pos][j];}}if(a[pos][0]<=l){disa+=a[pos][0];l-=a[pos][0];}double c=inf;if(disb==0) c=inf;else c=disa*1.0/disb;if(c<m1||(c==m1&&h[i]>mh)){m1=c;mh=h[i];ans=i;}}if(m1!=inf)printf("%d\n",ans);else printf("%d\n",hest);scanf("%d",&m);for(int i=1;i<=m;++i){int s;scanf("%d%lld",&s,&x);int pos=s;ll l=x,disa=0,disb=0;for(int j=22;j>=0;--j){if(f[pos][j]!=0&&a[pos][j]+b[pos][j]<=l){disa+=a[pos][j];disb+=b[pos][j];l-=a[pos][j]+b[pos][j];pos=f[pos][j];}}if(a[pos][0]<=l){disa+=a[pos][0];l-=a[pos][0];}printf("%lld %lld\n",disa,disb);}
}

 

转载于:https://www.cnblogs.com/rir1715/p/7695611.html

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

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

相关文章

扩展巴科斯范式

2019独角兽企业重金招聘Python工程师标准>>> 扩展巴科斯范式 维基百科&#xff0c;自由的百科全书 扩展巴科斯-瑙尔范式(EBNF)是表达作为描述计算机编程语言和形式语言的正规方式的上下文无关文法的元语法符号表示法。它是基本巴科斯范式(BNF)元语法符号表示法的一种…

20100519 学习记录:asp CreateFolder/上传附件

新增一个上传附件的功能。在网上找了一下&#xff0c;基本都是在化境HTTP上传程序基础上改的&#xff0c;灰常感谢这个源代码的开发者&#xff0c;深深鞠躬。不过这个代码要求在上传图片时&#xff0c;输入的文件夹必须是已存在的文件夹&#xff0c;不然就会出错&#xff0c;于…

洛谷P1420 最长连号

题目描述 输入n个正整数&#xff0c;&#xff08;1<n<10000),要求输出最长的连号的长度。&#xff08;连号指从小到大连续自然数&#xff09; 输入输出格式 输入格式&#xff1a; 第一行&#xff0c;一个数n; 第二行&#xff0c;n个正整数&#xff0c;之间用空格隔开。 输…

删除容器docker rm和强制删除容器docker rm -f

显示所有容器 docker ps -a删除容器&#xff0c;运行中的容器不行 docker rm 容器id强制删除容器&#xff0c;运行中的容器也是可以删除的 docker rm -f 容器iddocker rm 删除运行中的容器会报错 Error response from daemon: You cannot remove a running container 8c03b6c4d…

Exchange2007 从零到入门(2)---收件人管理

Exchange2007 从零到入门---收件人管理在上一次的文章中讲到了如何为企业部署安装exchange2007服务器。但是部署完成的服务器还并不能使用。因为现在的服务器中还没有用户。在exchange中&#xff0c;用户被称作为“收件人”&#xff0c;exchange中用户管理的主要任务就是对“收…

测试对bug如何分析和定位

如何去区分一个功能测试工程师的水平高和低&#xff1f; 可以从很多个方面去检查&#xff0c;比如测试的思路&#xff0c; 比如测试用例的覆盖度&#xff1f;&#xff0c;比如测试出bug是否能够定位到根因&#xff1f; 上面说的各个方面都很合理&#xff0c;那我们平常如何如更…

Error response from daemon: You cannot remove a running container 8c03b6c4da31d435bcaf8c4a6c59938c3b

Error response from daemon: You cannot remove a running container 8c03b6c4da31d435bcaf8c4a6c59938c3b668eaff36903b13583329034508135. Stop the container before attempting removal or force remove原因&#xff1a;该容器正在运行中&#xff0c;不能直接删除 方法一…

DNS 错误事件4000 4013

DNS 错误事件4000 4013&#xff0c;无法创建活动目录本身的区域 WINDOWS 2003 DNS服务器无法解析 错误ID 4000 DNS 服务器无法打开 Active Directory。这台 DNS 服务器配置成为这个区域获得并 使用目录中信息并且没有它便不能加载区域。请检查 Active Directory 操作正常并 重新…

Android零基础入门第81节:Activity数据传递

在Android开发中&#xff0c;经常要在Activity之间传递数据。前面也学习了Activity和Intent相关基础&#xff0c;接下来一起来学习Activity的数据传递。 一、简介 通过前面的学习知道&#xff0c;Intent可以用来开启Activity&#xff0c;同样它也可以用来在Activity之间传递数据…

如何快速删除打印机任务

在使用打印机的时候经常回遇到打印机任务栏中的任务总是处于"正在删除"的状态这往往让办公室里的GG MM们等让十几分钟的时间,我在这里告诉大家一个简单快速的方法来快速的删除任务栏中的打印任务.那就是重新启动print spooler服务:1.首先在开始-运行中输入CMD进入DOS…

(转)java内部类详解

本文转自http://www.cnblogs.com/dolphin0520/p/3811445.html&#xff0c;谢谢作者 说起内部类这个词&#xff0c;想必很多人都不陌生&#xff0c;但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多&#xff0c;用得最多的是在有事件监听的情况下&#xff0c;并且即…

vue axios

vue axios全攻略 不再继续维护vue-resource&#xff0c;并推荐大家使用 axios 开始&#xff0c;axios 被越来越多的人所了解。本来想在网上找找详细攻略&#xff0c;突然发现&#xff0c;axios 的官方文档本身就非常详细&#xff01;&#xff01;有这个还要什么自行车&#xff…

阶段项目(一)

第四章 网页计算器&#xff08;1&#xff09;前台页面设计&#xff1a;<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />&#xff08;2&#xff09;预览效果&#xff1a;&#xff08;3&#xff09;后台代码编写&#xff1…

9款超绚丽的HTML5/CSS3应用和动画特效

HTML5 现在已经不是很前卫的东西了&#xff0c;越来越多的网站和移动应用都在不断地尝试使用HTML5来更好地优化用户体验。今天我们要分享9款超绚丽的HTML5/CSS3应用和动画特效&#xff0c;这里面有菜单、按钮、图片、Loading加载动画等&#xff0c;一定会有你需要的。 1、CSS3飘…

word中取消自动目录超链接的方法

把所有的超链接按CtrlShiftF9取消后&#xff0c;就变成黑色字也没有下划线了 [方法1] 按 CtrlA 全选&#xff0c;然后再按 CtrlShiftF9。 [方法2] 其实一个比较简单的办法是先贴在notepad里&#xff0c;然后再剪切复制进 word。如果你用的是word2003&#xff0c;粘贴后在底…

莫队算法

莫队在知乎回答了一波&#xff0c;推荐了一篇博客&#xff0c;但原网址挂了。最后凭借搜狗的网页快照&#xff0c;我终于一睹这篇博客的真容。 例题 &#xff08;2010年国家集训队论文答辩&#xff09;小K的袜子 对于询问\([L,R]\)&#xff0c;设其中颜色为\(x,y,z...\)的袜子的…