题解

双向链表加倍增。。。

正写着不一定能写对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[]; int n,m,hest,ys[],zj[],cj[],f[][];
ll x,her,a[][],b[][],h[]; 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=;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+,e+n+,cmp);
for(int i=;i<=n;++i)
e[i].fr=e[i-].i,e[i].to=e[i+].i;
sort(e+,e+n+,cm2);
for(int i=;i<=n;++i)
{
ll m1=inf,m2=inf,hh[];int pos[],a1,a2; hh[]=abs(h[i]-h[e[i].fr]); pos[]=e[i].fr;
hh[]=abs(h[i]-h[e[e[i].fr].fr]); pos[]=e[e[i].fr].fr;
hh[]=abs(h[i]-h[e[i].to]); pos[]=e[i].to;
hh[]=abs(h[i]-h[e[e[i].to].to]); pos[]=e[e[i].to].to; if(e[i].fr==)hh[]=inf;
if(e[e[i].fr].fr==)hh[]=inf;
if(e[i].to==)hh[]=inf;
if(e[e[i].to].to==)hh[]=inf; for(int j=;j<=;++j)
if(m1>hh[j]||(m1==hh[j]&&h[a1]>h[pos[j]]))m2=m1,a2=a1,m1=hh[j],a1=pos[j];
else
if(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!=)e[e[i].fr].to=e[i].to;
if(e[i].to!=)e[e[i].to].fr=e[i].fr; }
for(int i=;i<=n;++i)
{
f[i][]=zj[cj[i]];
if(i<=n-)
a[i][]=abs(h[i]-h[cj[i]]);
if(i<=n-)
b[i][]=abs(h[cj[i]]-h[zj[cj[i]]]);
}
for(int i=;i<=;++i)
for(int j=;j<=n;++j)
{
f[j][i]=f[f[j][i-]][i-];
a[j][i]=a[j][i-]+a[f[j][i-]][i-];
b[j][i]=b[j][i-]+b[f[j][i-]][i-];
} scanf("%lld",&x);
int ans=;
double m1=inf;
ll mh=-;
for(int i=;i<=n;++i)
{
int pos=i;
ll l=x,disa=,disb=;
for(int j=;j>=;--j)
{
if(f[pos][j]!=&&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][]<=l){
disa+=a[pos][];
l-=a[pos][];
}
double c=inf;
if(disb==) 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=;i<=m;++i)
{
int s;
scanf("%d%lld",&s,&x);
int pos=s;
ll l=x,disa=,disb=;
for(int j=;j>=;--j)
{
if(f[pos][j]!=&&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][]<=l){
disa+=a[pos][];
l-=a[pos][];
}
printf("%lld %lld\n",disa,disb);
}
}

【NOIP2012】旅行计划的更多相关文章

  1. COGS 2. 旅行计划

    2. 旅行计划 ★☆   输入文件:djs.in   输出文件:djs.out   简单对比时间限制:3 s   内存限制:128 MB 过暑假了,阿杜准备出行旅游,他已经查到了某些城市的两两之间的距 ...

  2. Crash的旅行计划

    除草了.. Crash的旅行计划 [问题描述] 过不了多久,Crash就要迎来他朝思暮想的暑假.在这个暑假里,他计划着到火星上旅游.在火星上有N个旅游景点,Crash用1至N这N个正整数对这些景点标号 ...

  3. 【51Nod】1273 旅行计划 树上贪心

    [题目]51Nod 1273 旅行计划 [题意]给定n个点的树和出发点k,要求每次选择一个目的地旅行后返回,使得路径上未访问过的点最多(相同取编号最小),旅行后路径上所有点视为访问过,求旅行方案.\( ...

  4. 51nod 1273 旅行计划——思维题

    某个国家有N个城市,编号0 至 N-1,他们之间用N - 1条道路连接,道路是双向行驶的,沿着道路你可以到达任何一个城市.你有一个旅行计划,这个计划是从编号K的城市出发,每天到达一个你没有去过的城市, ...

  5. 洛谷P1137 旅行计划

    P1137 旅行计划 题目描述 小明要去一个国家旅游.这个国家有N个城市,编号为1-N,并且有M条道路连接着,小明准备从其中一个城市出发,并只往东走到城市i停止. 所以他就需要选择最先到达的城市,并制 ...

  6. 洛谷 P1137 旅行计划

    旅行计划 待证明这样dp的正确性. #include <iostream> #include <cstdio> #include <cstring> #includ ...

  7. 51nod-1273: 旅行计划

    [传送门:51nod-1273] 简要题意: 给出一棵树,点数为n,现在你有一个旅行计划,从k城市出发,每天前往一个没去过的城市,并且旅途中经过的没有去过的城市尽可能的多(如果有2条路线,经过的没有去 ...

  8. 牛客-小a的旅行计划 + 数学推导

    小a的旅行计划 题意: 小a终于放假了,它想在假期中去一些地方游玩,现在有N个景点,编号为,同时小b也想出去游玩.由于一些特殊♂原因,他们的旅行计划必须满足一些条件 首先,他们可以从这N个景点中任意选 ...

  9. Problem 2 旅行计划 (travelling .cpp)———2019.10.6

    lth tql,lzpclxf tql Orz Problem 2 旅行计划 (travelling.cpp)[题目描述]小 Z 打算趁着暑假,开启他的旅行计划.但与其他同学不同的是,小 Z 旅行时并 ...

  10. 【csp模拟赛4】旅行计划 (travelling.cpp)--欧拉回路

    [题目描述] 小 Z 打算趁着暑假,开启他的旅行计划.但与其他同学不同的是,小 Z 旅 行时并不关心到达了哪个网红景点打了哪些卡.小 Z 更关注沿路的风光,而且 小 Z 觉得,尽管多次到达同一个地方, ...

随机推荐

  1. Struts框架的国际化

    本文将通过一个详细的实例来展示Struts框架的国际化,使用的版本号是struts1.1. 案例:在一个页面上有一个下拉框,下拉框中有3个国家的语言选项,各自是"中文简体".&qu ...

  2. 注册Azure AD 应用程序

    作者:陈希章 发表于2017年3月22日 在此前的文章中,我给大家介绍了分别用Graph 浏览器以及第三方工具(POSTMAN)快速体验Microsoft Graph的功能,其中有一个重要的环节就是, ...

  3. 源生js惯性滚动与回弹效果

    在写移动端的APP或者页面时,经常会遇到惯性滚动与回弹效果.用插件iscroll可以轻松解决这个问题,大多数的移动框架也能轻松解决这个问题,它们内部都封装了这个效果. 一直好奇这个效果原生JS是怎么实 ...

  4. MPSOC之1——overview、开发板、工具

    1.MPSOC overview MPSOC是xilinx公司推出的新一代集成SOC,比ZYNQ厉害了一个等级. 熟悉一个芯片,不能一头扎进详细的数据手册,应该从overview开始大概了解,然后浏览 ...

  5. Selenium与phantomJS 登入豆瓣 有bug

    # -*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.common.keys import Key ...

  6. 【ANT】使用ANT自动执行JMeter用例

    1.把\apache-jmeter-3.1\extras目录下的build.xml和jmeter-results-detail-report_21.xsl两个文件拷贝到用例所在目录: 2.修改用例名称 ...

  7. 将Maven的Web项目部署到windows的Tomcat里

    这里我用的是win7和tomcat8,且tomcat8下载的是压缩包而非安装文件. 第一步:先将tomcat8安装服务,cmd里更改目录为tomcat8(即压缩包解压后的那个文件夹)的bin文件夹, ...

  8. html查看器android

    1.android的API提供了访问网络的一个类HttpURLConnection 2.通过发送GET请求获取服务器返回的html代码 3.先看看布局文件,如下所示, <?xml version ...

  9. [置顶] 几行代码实现ofo首页小黄人眼睛加速感应转动

    最新版的ofo 小黄车的首页小黄人眼睛随重力而转动,感觉有点炫酷,学习一下吧,以下代码是在xamarin android下实现 ofo首页效果图: xamarin android实现效果: 实现思路: ...

  10. Find Unique pair in an array with pairs of numbers 在具有数字对的数组中查找唯一对

    给定一个数组,其中每个元素出现两次,除了一对(两个元素).找到这个唯一对的元素. 输入:第一行输入包含一个表示测试用例数的整数T.然后T测试用例如下.每个测试用例由两行组成.每个测试用例的第一行包含整 ...