当前位置: 首页 > news >正文

打卡第四天 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 提高组] 开车旅行

今天是我打卡第四天&#xff0c;做个省选/NOI−题吧(#^.^#) 原题链接&#xff1a;[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 工具&#xff0c;首先想到的就是“CI 界”的大佬--]enkjns,虽然在云原生爆发的年代,蹦出来了很多云原生的 CI 工具,但是都不足以撼动 Jenkins 的地位。在企业中对于持续集成、持续部署的需求非常多,并且也会经常有-些比较复杂的需求,此时新生的 CI 工具不足以支撑这些很…...

鸿蒙harmonyos next flutter混合开发之开发FFI plugin

创建FFI plugin summation&#xff0c;默认创建的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数据库安装 一、安装前的准备 系统要求&#xff1a; 硬件&#xff1a;内存至少1GB&#xff08;推荐2GB以上&#xff09;&#xff0c;硬盘至少10GB的可用空间&#xff0c;CPU至少2核心。 操作系统&#xff1a;支持Oracle版本的Windows&#xff08;如Windows 10或更高版本…...

猫玖破密啦

题目&#xff1a; 终究还是猫哥:3d5a3a0cfff7fb2e29194c0b7a89f284ff19a8 玖离&#xff1a;收到消息Oh,what_is_the_flag 玖离:7468655f666c61675f69735f666c13556d2cf2faec1e2d0f330b7dcceea1c62cb2 终究还是猫哥&#xff1a;收到消息************************************ 已…...

SpringBoot框架:服装生产管理的现代化工具

摘 要 本协力服装厂服装生产管理系统设计目标是实现协力服装厂服装生产的信息化管理&#xff0c;提高管理效率&#xff0c;使得协力服装厂服装生产管理作规范化、科学化、高效化。 本文重点阐述了协力服装厂服装生产管理系统的开发过程&#xff0c;以实际运用为开发背景&#…...

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&#xff0c;我们先来说个大…...

微信小程序——音乐播放器

一、界面设计 播放页面&#xff1a; 显示当前播放歌曲的封面图片、歌曲名称、歌手名称。有播放 / 暂停按钮、上一首、下一首按钮。进度条显示播放进度&#xff0c;可以拖动进度条调整播放位置。音量调节滑块。 歌曲列表页面&#xff1a; 展示歌曲列表&#xff0c;包括歌曲名称、…...

OceanBase 4.x 部署实践:如何从单机扩展至分布式部署

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

大数据新视界 --大数据大厂之TeZ 大数据计算框架实战:高效处理大规模数据

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

docker详解介绍+基础操作 (三)

1.docker 存储引擎 Overlay&#xff1a; 一种Union FS文件系统&#xff0c;Linux 内核3.18后支持 Overlay2&#xff1a;Overlay的升级版&#xff0c;docker的默认存储引擎&#xff0c;需要磁盘分区支持d-type功能&#xff0c;因此需要系统磁盘的额外支持。 关于 d-type 传送…...

【大语言模型-论文精读】谷歌-BERT:用于语言理解的预训练深度双向Transformers

【大语言模型-论文精读】谷歌-BERT&#xff1a;用于语言理解的预训练深度双向Transformers 目录 文章目录 【大语言模型-论文精读】谷歌-BERT&#xff1a;用于语言理解的预训练深度双向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) 经典简单例子&#xff1a;情感分析任务背景微调 (3) 为什么微调work, 理论解释下 2…...

清华系“仓颉”来袭:图形起源:用AI颠覆字体设计,推动大模型商业化落地

大模型如何落地&#xff1f;又该如何实现商业化&#xff1f;这一议题已成为今年科技领域的焦点话题。 在一个鲜为人知的字体设计赛道上&#xff0c;清华创业公司“图形起源”悄然实现了商业变现&#xff1a;他们帮助字体公司将成本降低了80%&#xff0c;生产速度提升了10倍以上…...

分布式一致性协议的深度解析:Paxos与Raft

分布式系统的复杂性源于节点失效、网络分区、消息丢失等诸多不确定性。在这种背景下&#xff0c;分布式一致性问题应运而生&#xff0c;成为解决这些问题的核心。本文将从理论到实践&#xff0c;深入探讨两种经典的一致性协议&#xff1a;Paxos与Raft。文章适合有一定分布式系统…...

ai写作,五款软件助你快速写作!

在这个信息爆炸的时代&#xff0c;内容创作成为了连接用户、传递价值的桥梁。然而&#xff0c;面对日益增长的创作需求&#xff0c;如何在保证质量的同时提升效率&#xff0c;成为了每位创作者面临的难题。幸运的是&#xff0c;随着人工智能技术的飞速发展&#xff0c;AI写作软…...

解决JavaScript 数学运算精度丢失的问题

JavaScript 中执行浮点数运算时可能会遇到精度丢失的问题。这通常是因为浮点数的表示遵循IEEE 754标准&#xff0c;而这种表示法只能精确地表示有限的数字。对于大多数程序员来说&#xff0c;这不是一个问题&#xff0c;因为它允许计算机处理超出精度范围之外的数字。然而&…...

mysql学习教程,从入门到精通,SQL窗口函数(38)

1、SQL窗口函数 SQL窗口函数&#xff08;Window Functions&#xff09;是一种强大的数据分析工具&#xff0c;它们允许你在结果集的行上执行计算&#xff0c;而不需要将这些行分组到单独的输出行中。窗口函数通常与OVER()子句一起使用&#xff0c;该子句定义了窗口或分区&…...

gbase8s数据库实现黑白名单的几种方案

1、借用操作系统的黑白名单 2、使用数据库 TRUSTED CONTEXT 机制 CREATE TRUSTED CONTEXT tcx1USER rootATTRIBUTES (ADDRESS 172.16.39.162)ATTRIBUTES (ADDRESS 172.16.39.163)ENABLEWITH USE FOR wangyx WITHOUT AUTHENTICATION; 如上创建 可信任上下文对象 tcx1 在 jdb…...

Qt-窗口布局按钮输入类

1. 窗口布局 Qt 提供了很多摆放控件的辅助工具&#xff08;又称布局管理器或者布局控件&#xff09;&#xff0c;它们可以完成两件事&#xff1a; 自动调整控件的位置&#xff0c;包括控件之间的间距、对齐等&#xff1b; 当用户调整窗口大小时&#xff0c;位于布局管理器内的…...

Apache DolphinScheduler社区9月进展记录

各位热爱 Apache DolphinScheduler 的小伙伴们&#xff0c;社区 9 月月报更新啦&#xff01;这里将记录 Apache DolphinScheduler 社区每月的重要更新&#xff0c;欢迎关注&#xff01; 月度 Merge Star 感谢以下小伙伴上个月为 Apache DolphinScheduler 做的精彩贡献&#x…...

在docker中安装并运行mysql8.0.31

第一步&#xff1a;命令行拉取mysql镜像 docker pull mysql:8.0.31查看是否拉取成功 docker images mysql:latest第二步&#xff1a;运行mysql镜像&#xff0c;启动mysql实例 docker run -p 3307:3307 -e MYSQL_ROOT_PASSWORD"123456" -d mysql:8.0.313307:3307前…...

C++ | Leetcode C++题解之第458题可怜的小猪

题目&#xff1a; 题解&#xff1a; class Solution { public:int poorPigs(int buckets, int minutesToDie, int minutesToTest) {if (buckets 1) {return 0;}vector<vector<int>> combinations(buckets 1,vector<int>(buckets 1));combinations[0][0] …...

【万字长文】Word2Vec计算详解(三)分层Softmax与负采样

【万字长文】Word2Vec计算详解&#xff08;三&#xff09;分层Softmax与负采样 写在前面 第三部分介绍Word2Vec模型的两种优化方案。 【万字长文】Word2Vec计算详解&#xff08;一&#xff09;CBOW模型 markdown行 9000 【万字长文】Word2Vec计算详解&#xff08;二&#xff0…...

【分布式微服务云原生】探索Dubbo:接口定义语言的多样性与选择

目录 探索Dubbo&#xff1a;接口定义语言的多样性与选择引言Dubbo的接口定义语言&#xff08;IDL&#xff09;1. Java接口2. XML配置3. 注解4. Protobuf IDL 流程图&#xff1a;Dubbo服务定义流程表格&#xff1a;Dubbo IDL方式比较结论呼吁行动Excel表格&#xff1a;Dubbo IDL…...

SAP将假脱机(Spool requests)内容转换为PDF文档[RSTXPDFT4]

将假脱机(Spool requests)内容转换为PDF文档[RSTXPDFT4] 有时需要将Spool中的内容导出成PDF文件&#xff0c;sap提供了一个标准程序RSTXPDFT4可以实现此功能。 1, Tcode:SP01, 进入spool requests list 2, SE38 运行程序RSTXPDFT4 输入spool reqeust号码18680&#xff0c;然后…...

DNS能加速游戏吗?

在游戏玩家追求极致游戏体验的今天&#xff0c;任何可能提升游戏性能的因素都备受关注&#xff0c;DNS&#xff08;域名系统&#xff09;便是其中一个被探讨的对象。那么&#xff0c;DNS能加速游戏吗&#xff1f; 首先&#xff0c;我们需要了解DNS的基本功能。DNS就像是互联网…...

Raspberry Pi3B+之C/C++开发环境搭建

Raspberry Pi3B之C/C开发环境搭建 1. 源由2. 环境搭建2.1 搭建C语言开发环境2.2 工程目录结构2.3 Makefile2.4 Demo (main.c) 3. 测试工程3.1 编译3.2 运行 4. 总结5. 参考资料 1. 源由 为了配合《Ardupilot开源飞控之FollowMe验证平台搭建》&#xff0c;以及VINS-Fusion对于图…...