#include<cstdio>
#include<iostream>
#include<iomanip>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<bitset>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
const long long w=1000000000;
struct data{
int no;
long long sa,sb;
};
data f[100005][55];
int n,m,s,p,q;
long long a,b,k;
double z=1e10;
long long h[100005],hf[100005],hs[100005];
int fir[100005],sec[100005];
bool comp(int a,int b)
{
if (a<=b) return true;
return false;
}
void dfs(int x,int t,int w)
{
if (w%2!=0&&a+b+hs[x]<=t)
{
a+=hs[x];
dfs(sec[x],t,w+1);
}
if (w%2==0&&a+b+hf[x]<=t)
{
b+=hf[x];
dfs(fir[x],t,w+1);
}
return ;
}
void zzz(int x,int kk)
{
q=x;
for (int j=50;j>=0;j--)
if (f[x][j].no!=0&&f[x][j].sa<=w&&f[x][j].sb<=w&&f[x][j].sa!=0&&f[x][j].sb!=0&&f[x][j].sa+f[x][j].sb<=kk)
{
a+=f[x][j].sa;
b+=f[x][j].sb;
zzz(f[x][j].no,kk-f[x][j].sa-f[x][j].sb);
break;
}
return ;
}
int main()
{
freopen ("drive.in","r",stdin);
//freopen ("drive.out","w",stdout);
scanf ("%d",&n);
for (int i=1;i<=n;i++) scanf ("%lld",&h[i]);
memset (hf,127,sizeof(hf));
memset (hs,127,sizeof(hs));
for (int i=1;i<=n-1;i++)
for (int j=i+1;j<=n;j++)
{
if (hf[i]>abs(h[i]-h[j])||(hf[i]==abs(h[i]-h[j])&&h[j]<h[fir[i]]))
{
sec[i]=fir[i];
hs[i]=hf[i];
fir[i]=j;
hf[i]=abs(h[i]-h[j]);
}
else if (hs[i]>abs(h[i]-h[j])||(hs[i]==abs(h[i]-h[j])&&h[j]<h[sec[i]]))
{
hs[i]=abs(h[i]-h[j]);
sec[i]=j;
}
}
for (int i=1;i<=n;i++)
{
f[i][0].no=fir[sec[i]];
f[i][0].sa=hs[i];
f[i][0].sb=hf[sec[i]];
}
for (int j=1;j<=50;j++)
for (int i=1;i<=n;i++)
{
f[i][j].no=f[f[i][j-1].no][j-1].no;
f[i][j].sa=f[i][j-1].sa+f[f[i][j-1].no][j-1].sa;
f[i][j].sb=f[i][j-1].sb+f[f[i][j-1].no][j-1].sb;
}
scanf ("%lld%d",&k,&m);
for (int i=1;i<=n;i++)
{
a=0;b=0;
zzz(i,k);
if (f[q][0].sa+a+b<=k) a+=f[q][0].sa;
//dfs(i,k,1);
if (b!=0)
{
double zz=(double)a/b;//here
if (z>zz||(z==zz&&h[i]>h[p]))
{
z=zz;
p=i;
}
}
}
printf ("%d\n",p);
for (int i=1;i<=m;i++)
{
scanf ("%d%lld",&s,&k);
a=0;b=0;
//dfs(s,k,1);
//printf ("%lld %lld\n",a,b);
zzz(s,k);
if (f[q][0].sa+a+b<=k) a+=f[q][0].sa;
printf ("%lld %lld\n",a,b);
}
return 0;
}相关推荐
静态时序分析(STA)_深入解析Data to Data Checks的零周期挑战
本文深入解析了静态时序分析(STA)中Data to Data Checks的核心概念与零周期挑战。重点探讨了当Setup要求值超过时钟周期时,工具如何调整发射沿,并导致Hold检查的发射与捕获沿“分裂”这一反直觉现象。文章通过案例详细解读了时序报告,并提供了通过调整约束或接受多周期保持两种策略来应对这一挑战,帮助工程师正确理解和处理此类复杂时序检查。
NOIP2012Day1T3-开车旅行
题解: 首先我们可以分别建立小AAA和小BBB路程森林。其实森林也不用用边表去存储它,只要记录一下fa[i]fa[i]fa[i],即iii点的下一个点就可以了 小AAA和小BBB旅行就等价于在这些森林里跑,很容易想到树上倍增。 我们可以令f[i][j]f[i][j]f[i][j]为当前AAA开车在第iii个点经过2j2j2^j天后到达的点 g1[i][j]g1[i][j]g1[i][j...
D触发器(D Flip-Flop)与D锁存器(D Latch)
在解释这个练习题之前,我们先来简单回顾一下D触发器(D flip-flop)和D锁存器(D latch)的概念,以及它们在数字电路中的作用。这将帮助我们理解所提到的练习。
开车旅行
题目链接 真真一道倍增好题。 先说70分思路 我的: 从后边的城市往前跑,这样就能\(n^2\)时间内得到从城市\(i\)到城市\(j\)的路程了。........反正超级麻烦,最后也没写出来。后来想想最直接的暴力好像是\(n*m\),70分也能过。 代码估计以后也看不懂了。。。 #include<iostream> #include<cstdio> #inclu...
嵌入式Linux网络调试踩坑记:YT8531/YT8521 PHY驱动移植与设备树配置实战
本文深入解析嵌入式Linux系统中YT8531/YT8521 PHY驱动移植与设备树配置的实战经验。从网络不通的常见现象入手,详细介绍了驱动移植关键点、设备树配置详解及常见问题排查技巧,帮助开发者快速解决RGMII接口调试难题,提升嵌入式网络开发效率。
从零构建边缘AI数据管道:K230+ESP8266的物联网实践指南
本文详细介绍了如何利用K230开发板和ESP8266模块构建高可靠性的边缘AI数据管道,特别针对智能农业监测场景。通过完整的系统架构设计、AI模型部署、低功耗通信优化和云端集成方案,为开发者提供了一套可落地的物联网实践指南,重点解决了边缘计算环境下的数据传输稳定性和能效管理问题。
洛谷 P1081 [NOIP2012 提高组] 开车旅行
小 AA 和小 BB 决定利用假期外出旅行,他们将想去的城市从 11 到 �n 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 �i 的海拔高度为ℎ�hi,城市 �i 和城市 �j 之间的距离 ��,�di,j 恰好是这两个城市海拔高度之差的绝对值,即 ��,�=∣ℎ�−ℎ�∣di,j=∣hi−hj∣。旅行过程中,小 AA 和小 BB 轮流开车,第一天小 AA 开车,之后每天轮换一次。
FreeCAD地下管道自动化建模实战:Python脚本从入门到导出OBJ
本文详细介绍了如何利用FreeCAD的Python API实现地下管道的自动化建模,从数据处理到模型导出OBJ格式的全流程。通过实战案例和代码示例,展示了圆形和矩形截面管道的创建方法,以及法兰连接等特殊处理技巧,大幅提升工程设计效率。
【NOIP2012提高组】开车旅行
把ab各走一次算一步 f[i][j]表示i点跳2^j步走到的点 da[i][j]表示i点跳2^j步a走的路程 db[i][j]表示i点跳2^j步b走的路程 倒着扫一遍求a从i点走出一次走到的点toi,记录da[i][0] pre[i]表示i这个点是哪个点的to , 倒着扫一遍求b从to[i]走出一次走到的点,存在f[pre[i]][0]中,记录db[pre[i]][0] 倍增 ...
DIKW模型实战:用Obsidian打造个人知识库的5个关键步骤
本文详细介绍了如何利用DIKW模型在Obsidian中构建高效个人知识库的5个关键步骤,从数据收集到智慧应用的全流程实践。通过标记系统、信息加工引擎和知识结晶方法,帮助知识工作者实现从原始数据到决策智慧的认知跃迁,提升个人知识管理效率。
Kong API Gateway 配置与深入
Kong是一个开源的、高性能的API网关,提供了一种简单易用的服务间路由、流量管理和安全防护方案,其最初起源于Nginx Inc.,但后迁移至Apache Software Foundation。Kong支持RESTful、GraphQL、TCP/UDP等协议,可与AWS Lambda、Azure Functions、Google Cloud Functions等云函数平台集成。其主要功能包括:服务发现与负载均衡、请求代理、身份认证与授权、缓存、日志记录、监控指标、灰度发布、多种插件等。
NOIP2012提高组day1-T3:开车旅行
NOIP2012提高组day1-T3:开车旅行,倍增法优化动态规划。
Python的单元测试之unittest
是一个功能类似 unittest 的库,它集合众家标准测试库之所长,和 unittest 相比,功能更为强大,使用更为简单,OpenStack 广泛的利用它编写单元测试。unittest 提供了自动匹配发现并执行测试用例的功能,随着项目代码结构越发庞大,势必有多个测试文件,自动匹配发现并测试用例的功能在此就显得非常有用,只要满足。unittest 提供了丰富的命令行入口,可以根据需要执行某些特定的用例。的测试用例都会被 unittest 发现并执行,测试用例文件的默认匹配规则为 test*.py。
【NOIP2012】Day1T3 开车旅行
开车旅行 Description 小A和小B决定利用假期外出旅行,他们将想去的城市从1到N编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市ii的海拔高度为HiH_i,城市ii 和城市jj 之间的距离d[i,j]d[i,j]恰好是这两个城市海拔高度之差的绝对值,即d[i,j]=∣∣Hi−Hj∣∣d[i,j]=\left|H_i-H_j\right| 。 旅行过程中
pscad IEEE标准系统搭建说明
pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
2012Noip提高组Day1 T3 开车旅行
题目描述 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的 城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为 Hi,城市 i 和城市 j 之间的距离 d[i,j]恰好是这两个城市海拔高度之差的绝对值,即 d[i,j] = |Hi− Hj|。 旅行过程中,小 A 和小 B...
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
NOIP2012DAY1T3【开车旅行】
Description 小A和小B决定利用假期外出旅行,他们将想去的城市从1到N编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市i 的海拔高度为Hi,城市i 和城市j 之间的距离d[i,j]恰好是这两个城市海拔高度之差的绝对值,即d[i,j] = |Hi - Hj|。 旅行过程中,小A和小B轮流开车,第一天小A开车,之后每天轮换一次。他们计划选择一个城
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
Noip2012 Day1 T3 开车旅行无题解的70分代码(未完成)
目前只能拿70分,有时间会补完。满分貌似要用倍增来优化时间
【题解】 NOIP2012 提高组day1 T3 开车旅行(倍增 dfs 模拟) 70分做法
本文参考自: 原文地址 倍增没有学,不过我们可以通过模拟和dfs得到70分的部分分。 手写dis函数求两个城市距离=海拔差的绝对值。设一个km[i][2]的二维数组,来记录离i个城市距离最近和第二近的城市,要注意题目里有许多细节。例如距离相同时判断海拔低的城市更近。设m2 m1为0代表离i次近和最近的城市,循环城市i,再循环j(i+1 到 n),如果满足上述条件,就用j更新m1,m1更新m2...
习题:开车旅行(倍增+预处理)
开车旅行(NOIP提高组2012)【描述】小A和小B决定利用假期外出旅行,他们将想去的城市从1到N编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市i 的海拔高度为Hi,城市i 和城市j 之间的距离d[i,j]恰好是这两个城市海拔高度之差的绝...
【noip】开车旅行 平衡树 倍增 treap tree
noip2012年day1最后一题 感觉2012年的都好难写 疫情控制也是。。 描述 小A和小B决定利用假期外出旅行,他们将想去的城市从1到N编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市i 的海拔高度为Hi,城市i 和城市j 之间的距离d[i,j]恰好是这两个城市海拔高度之差的绝对值,即d[i,j] = |Hi - Hj|。 旅行过程中,
【NOIp】NOIp2012
NOIp 2012 day 1 T1 Vigenère 密码 标签:模拟 主要是用了ASCII码,字母'A'的ASCII码是41H(0100 0001B),字母'a'的ASCII码是61H(0110 0001B),字母'A'与'a'的二进制后5位是相同的,所以无论是大写字母还是小写字母x,x &31(1 1111B)的值就是x在字母表里的顺序。 简单判一下边界就行了 c...
NOIp2012 开车旅行
开车旅行 版权yangyaojia.cnblogs.com NOIp2012 day1 T3 题目大意 给出n个排成一行的城市,每个城市有一个不同的海拔。定义两个城市间的距离等于他们的高度差的绝对值,且绝对值相等的时候海拔低的距离近。有两个人轮流开车,从左往右走。A每次都选最近的,B每次都选次近的。旅行时有一个总路程x,如果两个人的总路程>x 或 有一个人无法按照自...
开车旅行(drive)
来源:NOIP2012提高组Day1
noip2012 开车旅行 (倍增处理)
P1780开车旅行 Accepted 标签:数据结构NOIP提高组2012 描述 小A和小B决定利用假期外出旅行,他们将想去的城市从1到N编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市i 的海拔高度为Hi,城市i 和城市j 之间的距离d[i,j]恰好是这两个城市海拔高度之差的绝对值,即d[
VIJOS 1780 开车旅行
描述 小A和小B决定利用假期外出旅行,他们将想去的城市从1到N编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市i 的海拔高度为Hi,城市i 和城市j 之间的距离d[i,j]恰好是这两个城市海拔高度之差的绝对值,即d[i,j] = |Hi - Hj|。 旅行过程中,小A和小B轮流开车,第一天小A开车,之后每天轮换一次。他们计划选择一个城市S作为起点,一直向
351



被折叠的 条评论
为什么被折叠?



