打卡第四天 P1081 [NOIP2012 提高组] 开车旅行
今天是我打卡第四天,做个省选/NOI−题吧(#^.^#)
原题链接:[NOIP2012 提高组] 开车旅行 - 洛谷
题目描述
输入格式
输出格式
输入输出样例
输入 #1
4
2 3 1 4
3
4
1 3
2 3
3 3
4 3
输出 #1
1
1 1
2 0
0 0
0 0
输入 #2
10
4 5 6 1 2 3 7 8 9 10
7
10
1 7
2 7
3 7
4 7
5 7
6 7
7 7
8 7
9 7
10 7
输出 #2
2
3 2
2 4
2 1
2 4
5 1
5 1
2 1
2 0
0 0
0 0
说明/提示
【样例1说明】
【样例2说明】
【数据范围与约定】
C++
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+100,INF=2e9;
int da[20][N][5],db[20][N][5],f[20][N][5],h[N],s[N],x[N],n,x0,m,la,lb,ansid;
double ans=INF*1.0;
struct City{int id,h;friend bool operator <(City a,City b){return a.h<b.h;}
};
multiset<City> q;
void init(){h[0]=INF,h[n+1]=-INF;City start;start.id=0,start.h=INF;q.insert(start),q.insert(start);start.id=n+1,start.h=-INF;q.insert(start),q.insert(start);for(int i=n;i;i--){City now;now.id=i;now.h=h[i];q.insert(now);auto it=q.lower_bound(now);it--;int lastd=(*it).id, lasth=(*it).h;it++;it++; int nextd=(*it).id,nexth=(*it).h;it--;int ga,gb;if(abs(nexth-h[i])>=abs(lasth-h[i])){gb=lastd;it--,it--;if(abs(nexth-h[i])>=abs((*it).h-h[i])){ga=(*it).id;} else {ga=nextd;}} else {gb=nextd;it++,it++;if(abs((*it).h-h[i])>=abs(lasth-h[i])){ga=lastd;}else {ga=(*it).id;} }f[0][i][0]=ga,f[0][i][1]=gb;da[0][i][0]=abs(h[i]-h[ga]);db[0][i][1]=abs(h[i]-h[gb]);}
}void fun_dp()
{for(int i=1;i<=18;i++)for(int j=1;j<=n;j++)for(int k=0;k<2;k++){if(i==1)f[1][j][k]=f[0][f[0][j][k]][1-k],da[1][j][k]=da[0][j][k]+da[0][f[0][j][k]][1-k],db[1][j][k]=db[0][j][k]+db[0][f[0][j][k]][1-k];else f[i][j][k]=f[i-1][f[i-1][j][k]][k],da[i][j][k]=da[i-1][j][k]+da[i-1][f[i-1][j][k]][k],db[i][j][k]=db[i-1][j][k]+db[i-1][f[i-1][j][k]][k];}
}void calc(int s,int x){int p=s;la=0,lb=0;for(int i=18;i>=0;i--)if(f[i][p][0]&&la+lb+da[i][p][0]+db[i][p][0]<=x)la+=da[i][p][0],lb+=db[i][p][0],p=f[i][p][0];
}
void ans1(){for(int i=1;i<=n;i++){calc(i,x0); double lla=(double)la/(double)lb;if(lla<ans){ans=lla;ansid=i;}else if(lla==ans)if(h[i]>h[ansid])ansid=i;} cout<<ansid<<endl;
}
void ans2(){for(int i=1;i<=m;i++){calc(s[i],x[i]);printf("%d %d\n",la,lb);}
}
int main(){cin>>n;for(int i=1;i<=n;i++)cin>>h[i];cin>>x0>>m;for(int i=1;i<=m;i++)cin>>s[i]>>x[i];init();fun_dp();ans1();ans2();return 0;
}
Java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Arrays;
public class Main {public static int MAXN = 100001;public static int MAXP = 20;public static int[] arr = new int[MAXN];public static int[] to1 = new int[MAXN];public static int[] dist1 = new int[MAXN];public static int[] to2 = new int[MAXN];public static int[] dist2 = new int[MAXN];public static int[][] rank = new int[MAXN][2];public static int[] last = new int[MAXN];public static int[] next = new int[MAXN];public static int[][] stto = new int[MAXN][MAXP + 1];public static int[][] stab = new int[MAXN][MAXP + 1];public static int[][] sta = new int[MAXN][MAXP + 1];public static int[][] stb = new int[MAXN][MAXP + 1];public static int n, m, x0;public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));StreamTokenizer in = new StreamTokenizer(br);PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));in.nextToken();n = (int) in.nval;for (int i = 1; i <= n; i++) {in.nextToken();arr[i] = (int) in.nval;}near();st();in.nextToken();x0 = (int) in.nval;out.println(best());in.nextToken();m = (int) in.nval;for (int i = 1, s, x; i <= m; i++) {in.nextToken();s = (int) in.nval;in.nextToken();x = (int) in.nval;travel(s, x);out.println(a + " " + b);}out.flush();out.close();br.close();}public static void near() {for (int i = 1; i <= n; i++) {rank[i][0] = i;rank[i][1] = arr[i];}Arrays.sort(rank, 1, n + 1, (a, b) -> a[1] - b[1]);for (int i = 1; i <= n; i++) {last[rank[i][0]] = i == 1 ? 0 : rank[i - 1][0];next[rank[i][0]] = i == n ? 0 : rank[i + 1][0];}for (int i = 1; i <= n; i++) {to1[i] = 0;dist1[i] = 0;to2[i] = 0;dist2[i] = 0;update(i, last[i]);update(i, last[last[i]]);update(i, next[i]);update(i, next[next[i]]);delete(i);}}public static void update(int i, int r) {if (r == 0) {return;}int d = Math.abs(arr[i] - arr[r]);if (to1[i] == 0 || d < dist1[i] || (d == dist1[i] && arr[r] < arr[to1[i]])) {to2[i] = to1[i];dist2[i] = dist1[i];to1[i] = r;dist1[i] = d;} else if (to2[i] == 0 || d < dist2[i] || (d == dist2[i] && arr[r] < arr[to2[i]])) {to2[i] = r;dist2[i] = d;}}public static void delete(int i) {int l = last[i];int r = next[i];if (l != 0) {next[l] = r;}if (r != 0) {last[r] = l;}}public static void st() {for (int i = 1; i <= n; i++) {stto[i][0] = to1[to2[i]];stab[i][0] = dist2[i] + dist1[to2[i]];sta[i][0] = dist2[i];stb[i][0] = dist1[to2[i]];}for (int p = 1; p <= MAXP; p++) {for (int i = 1; i <= n; i++) {stto[i][p] = stto[stto[i][p - 1]][p - 1];if (stto[i][p] != 0) {stab[i][p] = stab[i][p - 1] + stab[stto[i][p - 1]][p - 1];sta[i][p] = sta[i][p - 1] + sta[stto[i][p - 1]][p - 1];stb[i][p] = stb[i][p - 1] + stb[stto[i][p - 1]][p - 1];}}}}public static int best() {int ans = 0;double min = Double.MAX_VALUE, cur;for (int i = 1; i < n; i++) {travel(i, x0);cur = (double) a / (double) b;if (ans == 0 || cur < min || (cur == min && arr[i] > arr[ans])) {min = cur;ans = i;}}return ans;}public static int a, b;public static void travel(int s, int x) {a = 0;b = 0;for (int p = MAXP; p >= 0; p--) {if (stab[s][p] != 0 && x >= stab[s][p]) {x -= stab[s][p];a += sta[s][p];b += stb[s][p];s = stto[s][p];}}if (dist2[s] <= x) {a += dist2[s];}}}
Pascal
typear=array[1..3]of int64;
varh,down1,down2,z,zz,l,r:array[0..100000]of longint;f:array[1..100000,1..20]of ar;n,m,i,j,x0,a,b:longint;x:ar;
function edge(x,y:longint):longint;
beginexit(abs(h[x]-h[y]));
end;
function jump(x,y:longint):ar;
vari:longint;
beginfillchar(jump,sizeof(jump),0);jump[3]:=x;for i:=20 downto 1 doif(f[jump[3],i,3]>0)and(f[jump[3],i,1]+f[jump[3],i,2]+jump[1]+jump[2]<=y)thenbegininc(jump[1],f[jump[3],i,1]);inc(jump[2],f[jump[3],i,2]);jump[3]:=f[jump[3],i,3];end;if f[jump[3],1,1]+jump[1]+jump[2]<=y thenbegininc(jump[1],f[jump[3],1,1]);jump[3]:=down2[jump[3]];end;
end;
procedure kp(l,r:longint);
vari,j,k,t:longint;
begini:=l;j:=r;k:=h[z[(l+r)div 2]];repeatwhile h[z[i]]<k doinc(i);while h[z[j]]>k dodec(j);if i<=j thenbegint:=z[i];z[i]:=z[j];z[j]:=t;inc(i);dec(j);end;until i>j;if i<r thenkp(i,r);if j>l thenkp(l,j);
end;
procedure build(x:longint);
varll,rr:longint;
beginll:=x;rr:=x;while(ll>0)and(ll<=x)doll:=l[ll];while(rr<n)and(rr<=x)dorr:=r[rr];if ll=0 thendown1[x]:=rrelseif rr>n thendown1[x]:=llelseif edge(x,ll)<=edge(x,rr) thendown1[x]:=llelsedown1[x]:=rr;r[ll]:=rr;l[rr]:=ll;if(down1[x]=ll)and(ll>0)thenbeginll:=l[ll];while(ll>0)and(ll<=x)doll:=l[ll];endelseif rr<=n thenbeginrr:=r[rr];while(rr<n)and(rr<=x)dorr:=r[rr];end;if ll=0 then down2[x]:=rrelseif rr>n thendown2[x]:=llelseif edge(x,ll)<=edge(x,rr) thendown2[x]:=llelsedown2[x]:=rr;if(down1[x]<1)or(down1[x]>n)thendown1[x]:=0;if(down2[x]<1)or(down2[x]>n)thendown2[x]:=0;
end;
beginreadln(n);for i:=1 to n doread(h[i]);readln;for i:=0 to n+1 doz[i]:=i;kp(1,n);for i:=1 to n dobeginl[z[i]]:=z[i-1];r[z[i]]:=z[i+1];end;for i:=1 to n dobuild(i);for i:=1 to n doif down2[i]>0 thenbeginf[i,1,1]:=edge(i,down2[i]);f[i,1,3]:=down2[i];if down1[down2[i]]>0 thenbeginf[i,1,2]:=edge(down2[i],down1[down2[i]]);f[i,1,3]:=down1[down2[i]];end;end;for j:=2 to 20 dofor i:=1 to n doif(f[i,j-1,3]>0)and(f[f[i,j-1,3],j-1,3]>0)thenbeginf[i,j,1]:=f[i,j-1,1]+f[f[i,j-1,3],j-1,1];f[i,j,2]:=f[i,j-1,2]+f[f[i,j-1,3],j-1,2];f[i,j,3]:=f[f[i,j-1,3],j-1,3];end;readln(x0);a:=0;b:=0;j:=0;for i:=1 to n dobeginx:=jump(i,x0);if(a=0)and(b=0)thenbeginj:=i;a:=x[1];b:=x[2];endelseif(b=0)and(x[2]=0)and(h[i]>h[j])thenbeginj:=i;a:=x[1];b:=x[2];endelseif(x[2]<>0)and((b=0)or(x[1]/x[2]<a/b))thenbeginj:=i;a:=x[1];b:=x[2];end;end;writeln(j);readln(m);for i:=1 to m dobeginreadln(a,b);x:=jump(a,b);writeln(x[1],' ',x[2]);end;
end.
下一期要我讲什么题?
打在评论区哦,随机挑选一条评论(#^.^#),看过我的文章之后,能不能用您珍贵的小手手点赞吧,求求┭┮﹏┭┮
相关文章:

打卡第四天 P1081 [NOIP2012 提高组] 开车旅行
今天是我打卡第四天,做个省选/NOI−题吧(#^.^#) 原题链接:[NOIP2012 提高组] 开车旅行 - 洛谷 题目描述 输入格式 输出格式 输入输出样例 输入 #1 4 2 3 1 4 3 4 1 3 2 3 3 3 4 3 输出 #1 1 1 1 2 0 0 0 0 0 输入 #2 10 4 5 6 1 …...

Jenkins Pipline流水线
提到 CI 工具,首先想到的就是“CI 界”的大佬--]enkjns,虽然在云原生爆发的年代,蹦出来了很多云原生的 CI 工具,但是都不足以撼动 Jenkins 的地位。在企业中对于持续集成、持续部署的需求非常多,并且也会经常有-些比较复杂的需求,此时新生的 CI 工具不足以支撑这些很…...

鸿蒙harmonyos next flutter混合开发之开发FFI plugin
创建FFI plugin summation,默认创建的FFI plugin是求两个数的和 flutter create --templateplugin_ffi summation --platformsandroid,ios,ohos 创建my_application flutter create --org com.example my_application 在my_application项目中文件pubspec.yaml引…...
oracle数据库安装和配置
Oracle数据库安装 一、安装前的准备 系统要求: 硬件:内存至少1GB(推荐2GB以上),硬盘至少10GB的可用空间,CPU至少2核心。 操作系统:支持Oracle版本的Windows(如Windows 10或更高版本…...
猫玖破密啦
题目: 终究还是猫哥:3d5a3a0cfff7fb2e29194c0b7a89f284ff19a8 玖离:收到消息Oh,what_is_the_flag 玖离:7468655f666c61675f69735f666c13556d2cf2faec1e2d0f330b7dcceea1c62cb2 终究还是猫哥:收到消息************************************ 已…...
SpringBoot框架:服装生产管理的现代化工具
摘 要 本协力服装厂服装生产管理系统设计目标是实现协力服装厂服装生产的信息化管理,提高管理效率,使得协力服装厂服装生产管理作规范化、科学化、高效化。 本文重点阐述了协力服装厂服装生产管理系统的开发过程,以实际运用为开发背景&#…...

Android Preference的使用以及解析
简单使用 values.arrays.xml <?xml version"1.0" encoding"utf-8"?> <resources><string-array name"list_entries"><item>Option 1</item><item>Option 2</item><item>Option 3</item&…...

HCIP——GRE和MGRE
目录 VPN GRE GRE环境的搭建 GRE的报文结构 GRE封装和解封装报文的过程 GRE配置编辑 R1 R2 GRE实验编辑 MGRE 原理 MGRE的配置 R1 R2 R3 R4 查看映射表 抓包 MGRE环境下的RIP网络 综合练习编辑 VPN 说到GRE,我们先来说个大…...

微信小程序——音乐播放器
一、界面设计 播放页面: 显示当前播放歌曲的封面图片、歌曲名称、歌手名称。有播放 / 暂停按钮、上一首、下一首按钮。进度条显示播放进度,可以拖动进度条调整播放位置。音量调节滑块。 歌曲列表页面: 展示歌曲列表,包括歌曲名称、…...

OceanBase 4.x 部署实践:如何从单机扩展至分布式部署
OceanBase 4.x 版本支持2种部署模式:单机部署与分布式部署,同时支持从单机平滑扩展至分布式架构。这样,可以有效解决小型业务向大型业务转型时面临的扩展难题,降低了机器资源的成本。 以下将详述如何通过命令行,实现集…...

大数据新视界 --大数据大厂之TeZ 大数据计算框架实战:高效处理大规模数据
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
docker详解介绍+基础操作 (三)
1.docker 存储引擎 Overlay: 一种Union FS文件系统,Linux 内核3.18后支持 Overlay2:Overlay的升级版,docker的默认存储引擎,需要磁盘分区支持d-type功能,因此需要系统磁盘的额外支持。 关于 d-type 传送…...

【大语言模型-论文精读】谷歌-BERT:用于语言理解的预训练深度双向Transformers
【大语言模型-论文精读】谷歌-BERT:用于语言理解的预训练深度双向Transformers 目录 文章目录 【大语言模型-论文精读】谷歌-BERT:用于语言理解的预训练深度双向Transformers目录0. 引言1. 简介2 相关工作2.1 基于特征的无监督方法2.2 无监督微调方法2.3…...

【Java】集合中单列集合详解(一):Collection与List
目录 引言 一、Collection接口 1.1 主要方法 1.1.1 添加元素 1.1.2 删除元素 1.1.3 清空元素 1.1.4 判断元素是否存在 1.1.5 判断是否为空 1.1.6 求取元素个数 1.2 遍历方法 1.2.1 迭代器遍历 1.2.2 增强for遍历 1.2.3 Lambda表达式遍历 1.2.4 应用场景 二、…...

【Fine-Tuning】大模型微调理论及方法, PytorchHuggingFace微调实战
Fine-Tuning: 大模型微调理论及方法, Pytorch&HuggingFace微调实战 文章目录 Fine-Tuning: 大模型微调理论及方法, Pytorch&HuggingFace微调实战1. 什么是微调(1) 为什么要进行微调(2) 经典简单例子:情感分析任务背景微调 (3) 为什么微调work, 理论解释下 2…...

清华系“仓颉”来袭:图形起源:用AI颠覆字体设计,推动大模型商业化落地
大模型如何落地?又该如何实现商业化?这一议题已成为今年科技领域的焦点话题。 在一个鲜为人知的字体设计赛道上,清华创业公司“图形起源”悄然实现了商业变现:他们帮助字体公司将成本降低了80%,生产速度提升了10倍以上…...
分布式一致性协议的深度解析:Paxos与Raft
分布式系统的复杂性源于节点失效、网络分区、消息丢失等诸多不确定性。在这种背景下,分布式一致性问题应运而生,成为解决这些问题的核心。本文将从理论到实践,深入探讨两种经典的一致性协议:Paxos与Raft。文章适合有一定分布式系统…...

ai写作,五款软件助你快速写作!
在这个信息爆炸的时代,内容创作成为了连接用户、传递价值的桥梁。然而,面对日益增长的创作需求,如何在保证质量的同时提升效率,成为了每位创作者面临的难题。幸运的是,随着人工智能技术的飞速发展,AI写作软…...
解决JavaScript 数学运算精度丢失的问题
JavaScript 中执行浮点数运算时可能会遇到精度丢失的问题。这通常是因为浮点数的表示遵循IEEE 754标准,而这种表示法只能精确地表示有限的数字。对于大多数程序员来说,这不是一个问题,因为它允许计算机处理超出精度范围之外的数字。然而&…...
mysql学习教程,从入门到精通,SQL窗口函数(38)
1、SQL窗口函数 SQL窗口函数(Window Functions)是一种强大的数据分析工具,它们允许你在结果集的行上执行计算,而不需要将这些行分组到单独的输出行中。窗口函数通常与OVER()子句一起使用,该子句定义了窗口或分区&…...

idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...