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

embedded/2025/3/4 9:23:17/

5439. 农夫约翰真的种地

题目描述

农夫约翰在他的农场种植了 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,\ldots,t_N) (t1,t2,,tN)
请问至少多少天后能够满足,对于每个 ( 1 ≤ i ≤ N ) (1 \leq i \leq N) (1iN),恰好有 t i t_i ti 个芦笋比第 i i i 个芦笋的高度更高。

输入格式

第一行包含整数 (T),表示共有 (T) 个测试数据。
每组数据:

  • 第一行包含整数 N N N
  • 第二行包含 N N N 个整数 ( h 1 , h 2 , … , h N ) (h_1,h_2,\ldots,h_N) (h1,h2,,hN)
  • 第三行包含 N N N 个整数 a 1 , a 2 , … , a N a_1,a_2,\ldots,a_N a1,a2,,aN
  • 第四行包含 N N N 个整数 t 1 , t 2 , … , t N t_1,t_2,\ldots,t_N t1,t2,,tN

输出格式

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

数据范围

  • ( 1 ≤ T ≤ 10 ) (1 \leq T \leq 10) (1T10)
  • ( 1 ≤ N ≤ 2 × 1 0 5 ) (1 \leq N \leq 2 \times 10^5) (1N2×105)
  • ( 1 ≤ h i , a i ≤ 1 0 9 ) (1 \leq h_i,a_i \leq 10^9) (1hi,ai109)
  • ( 0 ≤ t i ≤ N − 1 ) (0 \leq t_i \leq 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 \times 10^5) 。

解题思路

我们可以用一个结构体维护芦笋的最终高度排名(num),初始高度(st),每天增长高度(k)。
每个芦笋第 ( x ) (x) (x)天的高度对应一个式子 ( s t + k x ) (st + kx) (st+kx),将芦笋按高度排名排序,对于任意两个相邻芦笋(st1在前),需解一个不等式 ( s t 1 + k 1 x > s t 2 + k 2 x ) (st1 + k1x > st2 + k2x) (st1+k1x>st2+k2x),求出一个(x)的范围,所有(x)的范围取交集,无交集输出(-1),有交集再输出(x)的最小值。

对于不等式 ( s t 1 + k 1 x > s t 2 + k 2 x ) (st1 + k1x > st2 + k2x) (st1+k1x>st2+k2x),又可以分四种情况化简:
( k 1 ≠ k 2 ) (k1 \neq k2) (k1=k2) 时,有两种情况:
[ { x > s t 2 − s t 1 k 1 − k 2 ( k 1 − k 2 > 0 ) x < s t 2 − s t 1 k 1 − k 2 ( k 1 − k 2 < 0 ) ] [ \begin{cases} x > \frac{st2 - st1}{k1 - k2} & (k1 - k2 > 0) \\ x < \frac{st2 - st1}{k1 - k2} & (k1 - k2 < 0) \end{cases} ] [{x>k1k2st2st1x<k1k2st2st1(k1k2>0)(k1k2<0)]
当 (k1 = k2) 时,只用看 (st1) 与 (st2),如果 (st1 < st2),则必定无解;如果 (st1 > st2),则不等式恒成立。

所以主要处理当 ( k 1 ≠ k 2 ) (k1 \neq k2) (k1=k2) 时的两种情况,维护 (x) 的值域的上下限 ( [ m i n s , m a x s ] ) ([mins, maxs]) ([mins,maxs]) 即可,对于 ( k 1 − k 2 > 0 ) (k1 - k2 > 0) (k1k2>0) 的,更新 ( m i n s = max ⁡ ( m i n s , s t 2 − s t 1 k 1 − k 2 ) ) (mins = \max(mins, \frac{st2 - st1}{k1 - k2})) (mins=max(mins,k1k2st2st1)),否则更新 ( m a x s = min ⁡ ( m a x s , s t 2 − s t 1 k 1 − k 2 ) ) (maxs = \min(maxs, \frac{st2 - st1}{k1 - k2})) (maxs=min(maxs,k1k2st2st1))

还要注意取整方向,可以在求下限时下向取整,更新时加上(1);求上限时上向取整,更新时减(1),这样就可以得到一个闭区间,详见注释。

AC Code

// Problem: 农夫约翰真的种地
// Contest: AcWing
// URL: https://www.acwing.com/problem/content/5442/
// Memory Limit: 64 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include<bits/stdc++.h>
typedef long long ll; // 确保 ll 在使用前被定义
using namespace std;
using i64 = long long;
#define f for(int i = 0; i < n;++i)
#define ff for(int i = 1; i <= n;++i)
#define int long long 
#define pii pair<int,int>
#define In \ll n; \std::cin >> n;\

const int mod = 1e9 + 7, N = 1e7;struct Lus{int h; int a; int t;
};void solve(){In; std::vector<Lus> lus(n);f std::cin >> lus[i].h;f std::cin >> lus[i].a;f std::cin >> lus[i].t;if(n == 1) {std::cout << 0 << "\n";return ;}std::sort(lus.begin(), lus.end(), [&](const Lus a, const Lus b){return a.t < b.t;});// 排序 + 特判 // 对高度排序, 使用struct记录数据, // 判断当前有多少个满足条件的, 然后根据生长情况判断,// 天数累加情况下寻找满足条件的情况i64 ansL = 0, ansR = 1e9;for(int i = 0; i < n - 1; i ++) {i64 A = lus[i + 1].a - lus[i].a;i64 B = lus[i].h - lus[i + 1].h;if(A > 0) {ansR = std::min(ansR,(i64)ceil((double)B / A) - 1);} else if(A < 0) {ansL = max(ansL,(int)floor((double)B / A) + 1);} else if(B <= 0) {ansR = -1;}}if(ansL > ansR) ansL = -1;std::cout << ansL << "\n";
}signed main(){std::ios::sync_with_stdio(false);std::cin.tie(0); std::cout.tie(0);ll T = 1;std::cin >> T;for(int i = 1; i <= T; ++i) solve();
}

http://www.ppmy.cn/embedded/169875.html

相关文章

自学微信小程序的第八天

DAY8 1、使用动画API即可完成动画效果的制作,先通过wx.createAnimation()方法获取Animation实例,然后调用Animation实例的方法实现动画效果。 表40:wx.createAnimation()方法的常用选项 选项 类型 说明 duration number 动画持续时间,单位为毫秒,默认值为400毫秒 timing…

如何远程访问svn中的URL

简介&#xff1a; 主要opencascade相关知识学习 格言&#xff1a; 万丈高楼平地起 要远程访问 SVN&#xff08;Subversion&#xff09;仓库中的 URL&#xff0c;通常需要以下步骤和注意事项&#xff1a; 1. 确认远程 SVN 服务器的访问协议 SVN 支持多种协议访问远程仓库&…

在python语言中,请详细介绍一下比较运算符中等于符号(==)的情况?

李升伟 整理 一、有关思考 嗯&#xff0c;我现在要详细了解一下Python中的等于运算符&#xff08;&#xff09;。首先&#xff0c;我得回忆一下自己之前学过的知识&#xff0c;可能有些地方不太确定&#xff0c;需要仔细思考或者查阅资料。 首先&#xff0c;等于运算符&#…

3天功能开发→3小时:通义灵码2.0+DEEPSEEK实测报告,单元测试生成准确率92%的秘密

前言 随着人工智能技术的迅猛发展&#xff0c;AI 赋能编程成为了必然趋势。通义灵码应运而生&#xff0c;它是阿里巴巴集团在人工智能与编程领域深度探索的结晶。通义灵码旨在借助 AI 的强大能力&#xff0c;为开发者提供更加智能、高效的编程辅助工具。通义灵码 2.0 作为其升…

【动手学强化学习】番外2-多智能体强化学习算法框架之“MARLlib”学习

文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 调研当前主流的MARL算法框架2.2.2 学习经典MARL算法框架——“MARLlib”&#xff08;1&#xff09;开发团队&#xff08;2&#xff09;简介 2.2.3 安装经典MARL算法框架——“MARL…

爬虫与翻译API接口的完美结合:开启跨语言数据处理新纪元

在全球化的今天&#xff0c;跨语言数据处理已成为技术领域的重要需求。无论是跨境电商、学术研究&#xff0c;还是内容创作&#xff0c;都需要高效、准确的翻译工具来打破语言障碍。今天&#xff0c;我们将深入探讨如何通过爬虫技术结合强大的 t_text 翻译文本API接口&#xff…

亚马逊新一代语音助手Alexa+的技术架构与战略布局分析

亚马逊推出Alexa全新版本——Alexa。该版本采用先进架构&#xff0c;自动连接大语言模型&#xff08;LLM&#xff09;、智能体能力、服务和设备&#xff0c;实现更具对话性、更智能、更个性化的用户体验&#xff0c;助力用户完成更多任务。 亚马逊新一代语音助手Alexa的技术架构…

mysql服务层介绍,NOSQL+SQL接口(nosql介绍),语法分析器,预处理器,优化器(优化的必要性,基于成本的优化器),缓存(弊端)

目录 mysql服务层 介绍 服务管理和公共组件 备份 NOSQL,SQL接口 介绍 nosql Parser模块(语法分析器) 介绍 词法分析 语法分析 示例 预处理器 引入 介绍 优化器 介绍 优化的必要性 基于成本的优化器 缓存 介绍 弊端 mysql服务层 介绍 数据库服务层是整个…