【蓝桥杯集训·每日一题2025】 AcWing 5439. 农夫约翰真的种地 python

devtools/2025/3/1 13:00:04/

AcWing 5439. 农夫约翰真的种地

题目描述

Week 2
2月27日

农夫约翰在他的农场种植了 N N N 个芦笋,编号 1 ∼ N 1 \sim N 1N

其中,第 i i i 个芦笋的初始高度为 h i h_i hi,每经过一天高度会增长 a i a_i ai

给定一个 0 ∼ N − 1 0 \sim N-1 0N1 的排列 t 1 , t 2 , … , t N t_1,t_2,…,t_N t1,t2,,tN

请问至少多少天后能够满足,对于每个 1 ≤ i ≤ N 1 \le i \le N 1iN,恰好有 t i t_i ti 个芦笋比第 i i i 个芦笋的高度更高。

输入格式

第一行包含整数 T T T,表示共有 T T T 个测试数据。

每组数据第一行包含整数 N N N

第二行包含 N N N 个整数 h 1 , h 2 , … , h N h_1,h_2,…,h_N h1,h2,,hN

第三行包含 N N N 个整数 a 1 , a 2 , … , a N a_1,a_2,…,a_N a1,a2,,aN

第四行包含 N N N 个整数 t 1 , t 2 , … , t N t_1,t_2,…,t_N t1,t2,,tN

输出格式

每组数据输出一行结果,一个整数表示答案,如果无解则输出 -1

数据范围

1 ≤ T ≤ 10 1 \le T \le 10 1T10, 1 ≤ N ≤ 2 × 1 0 5 1 \le N \le 2 \times 10^5 1N2×105, 1 ≤ h i , a i ≤ 1 0 9 1 \le h_i,a_i \le 10^9 1hi,ai109, 0 ≤ t i ≤ N − 1 0 \le t_i \le N-1 0tiN1, 保证 t 1 ∼ t N t_1 \sim t_N t1tN 是一个 0 ∼ N − 1 0 \sim N-1 0N1 的排列, 一个测试点内所有的 N N N 相加之和不超过 2 × 1 0 5 2 \times 10^5 2×105

输入样例1:
6  
1  
10  
1  
0  
2  
7 3  
8 10  
1 0  
2  
3 6  
10 8  
0 1  
2  
7 3  
8 9  
1 0  
2  
7 7  
8 8  
0 1  
2  
7 3  
8 8  
1 0
输出样例1:
0  
3  
2  
5  
-1  
-1
样例1解释

1 1 1 组数据,由于只有一个芦笋,所以不需要经过任何天数,第 0 0 0 天即可满足条件。

2 2 2 组数据,我们需要使得第 1 1 1 个芦笋比第 2 2 2 个芦笋更矮:

天数 芦笋1 芦笋2
0 7 3
1 15 13
2 23 23
3 31 33

经过 3 3 3 天后,即可满足条件。

3 , 4 3,4 3,4 组数据与第 2 2 2 组数据类似。

5 5 5 组数据,两个芦笋的初始高度和生长速度都相同,所以永远保持相同高度,一定无法满足条件。

6 6 6 组数据,两个芦笋的初始高度不满足条件,生长速度都相同,所以永远不可能满足条件。

输入样例2:
2  
5  
7 4 1 10 12  
3 4 5 2 1  
2 1 0 3 4  
5  
4 10 12 7 1  
3 1 1 4 5  
2 4 3 1 0
输出样例2:
4  
7
样例2解释

1 1 1 组数据, 4 4 4 天后各个芦笋的最终高度为 19 , 20 , 21 , 18 , 16 19, 20, 21, 18, 16 19,20,21,18,16

2 2 2 组数据, 7 7 7 天后各个芦笋的最终高度为 25 , 17 , 19 , 35 , 36 25, 17, 19, 35, 36 25,17,19,35,36


题意

给定 n n n 个整数 h i h_i hi,每次操作会使 h i 变为 h i + a i h_i 变为 h_i + a_i hi变为hi+ai,求能否在若干次操作后使得 h i h_i hi 的排名(从大到小)为 t i + 1 t_i + 1 ti+1。如果可以,求最小操作次数,否则输出-1

r : rank
x: day

易得:

h[r[1]] + x * a[r[1]] > h[r[2]] + x * a[[2]] > ...... > h[r[n]] + x * a[r[n]]

根据不等式解得最小非负整数x


AC_code

python">import math  T = int(input())  
for _ in range(T):  n = int(input())  h = list(map(int, input().split()))  a = list(map(int, input().split()))  t = list(map(int, input().split()))  ans = 0  rank = [-1] * n  for i in range(n):  rank[t[i]] = i  l, r = 0, float('inf')  for i in range(n - 1):  A = h[rank[i]] - h[rank[i + 1]]  B = a[rank[i + 1]] - a[rank[i]]  if B > 0:  r = min(r, math.ceil(A / B) - 1)  elif B < 0:  l = max(l, math.floor(A / B) + 1)  elif A <= 0:  r = -1  break  if l > r:  ans = -1  else:  ans = l  print(ans)

END
如果有更多问题或需要进一步的帮助,可以在评论区留言讨论哦!
如果喜欢的话,请给博主点个关注 谢谢


http://www.ppmy.cn/devtools/163623.html

相关文章

Python在实际工作中的运用-指定目录内所有Excel文件转CSV

闲来无事浏览到《【办公自动化】使用Python批量处理Excel文件并转为csv文件》这篇博文&#xff0c;关于多层目录Excel转Csv在处理过程中略显繁复&#xff0c;而且灵活度不高&#xff0c;代码如下&#xff1a; import pandas as pd import os from datetime import datetime # …

dify镜像拉取不下来如何解决

# 启动docker(一定要先启动再添加dns) systemctl start docker #添加国境镜像和dns sudo vim /etc/docker/daemon.json { "registry-mirrors":[ "https://dockerpull.pw"&#xff0c; "https://dockerhub.icu", "https://hu…

Redis 分布式锁

概念 在⼀个分布式的系统中&#xff0c;也会涉及到多个节点访问同⼀个公共资源的情况&#xff0c;此时就需要通过锁来做互斥控制&#xff0c;避免出现类似于 "线程安全" 的问题。但 C 的 std::mutex 只能在当前进程中⽣效, 在分布式的这种多个进程多个主机的场景下就…

C++核心指导原则: 源文件

C Core Guidelines 整理目录 哲学部分接口(Interface)部分函数部分类和类层次结构部分枚举部分资源管理部分表达式和语句部分性能部分并发和并行错误处理常量和不可变性泛型编程源文件 源文件规则 SF.1: Use a .cpp suffix for code files and .h for interface files if you…

微信小程序自定义导航栏,胶囊菜单按钮高度适配问题

抽离公共方法用条件编译对微信小程序&#xff0c;抖音小程序适配 公共组件模块建立一个导航模块 <template><view class"layout"><view class"navbar" ><view class"statusBar" :style"{height:getStatusBarHeight()p…

微信小程序记录用户在图书详情页面停留时间--即阅读时间,如果超过两小时,则每小时提醒用户一次

在微信小程序中记录用户在图书详情页面的停留时间&#xff0c;并根据条件&#xff08;如超过两小时&#xff09;进行提醒&#xff0c;可以通过以下步骤实现。以下是详细的实现方案&#xff1a; 1. 实现思路 记录进入页面的时间&#xff1a;当用户进入图书详情页面时&#xff0…

SpringSecurity踢出指定用户

SpringSecurity中可以使用 SessionRegistry 的实现类 SessionRegistryImpl 来获取session相关信息&#xff0c;可以通过这个实现类来踢出用户。 SpringSecurity配置 EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter {AutowiredISysUser…

MR30系列分布式I/O:高稳定与高精准赋能锂电池覆膜工艺革新

在新能源行业高速发展的背景下&#xff0c;锂电池生产工艺对自动化控制的精准性和可靠性提出了更高要求。作为锂电池生产中的关键环节&#xff0c;覆膜工艺直接关系到电池的绝缘性能、安全性及使用寿命。面对复杂的工艺控制需求&#xff0c;明达技术MR30系列分布式I/O模块凭借其…