CCF-CSP认证考试 202303-2 垦田计划 100分题解

更多 CSP 认证考试题目题解可以前往:CSP-CCF 认证考试真题题解


原题链接: 202303-2 垦田计划

时间限制: 1.0s
内存限制: 512.0MB

问题描述

顿顿总共选中了 n n n 块区域准备开垦田地,由于各块区域大小不一,开垦所需时间也不尽相同。据估算,其中第 i i i 块( 1 ≤ i ≤ n 1 \le i \le n 1in)区域的开垦耗时为 t i t_i ti 天。这 n n n 块区域可以同时开垦,所以总耗时 t T o t a l t_{Total} tTotal 取决于耗时最长的区域,即: t T o t a l = max ⁡ { t 1 , t 2 , ⋯ , t n } t_{Total} = \max \{ t_1, t_2, \cdots, t_n \} tTotal=max{t1,t2,,tn}

为了加快开垦进度,顿顿准备在部分区域投入额外资源来缩短开垦时间。具体来说:

  • 在第 i i i 块区域每投入 c i c_i ci 单位资源,便可将其开垦耗时缩短 1 1 1 天;
  • 耗时缩短天数以整数记,即第 i i i 块区域投入资源数量必须是 c i c_i ci 的整数倍;
  • 在第 i i i 块区域最多可投入 c i × ( t i − k ) c_i \times (t_i - k) ci×(tik) 单位资源,将其开垦耗时缩短为 k k k 天;
  • 这里的 k k k 表示开垦一块区域的最少天数,满足 0 < k ≤ min ⁡ { t 1 , t 2 , ⋯ , t n } 0 < k \le \min \{ t_1, t_2, \cdots, t_n \} 0<kmin{t1,t2,,tn};换言之,如果无限制地投入资源,所有区域都可以用 k k k 天完成开垦。

现在顿顿手中共有 m m m 单位资源可供使用,试计算开垦 n n n 块区域最少需要多少天?

输入格式

从标准输入读入数据。

输入共 n + 1 n+1 n+1 行。

输入的第一行包含空格分隔的三个正整数 n n n m m m k k k,分别表示待开垦的区域总数、顿顿手上的资源数量和每块区域的最少开垦天数。

接下来 n n n 行,每行包含空格分隔的两个正整数 t i t_i ti c i c_i ci,分别表示第 i i i 块区域开垦耗时和将耗时缩短 1 1 1 天所需资源数量。

输出格式

输出到标准输出。

输出一个整数,表示开垦 n n n 块区域的最少耗时。

样例输入1

4 9 2
6 1
5 1
6 2
7 1

样例输出1

5

样例解释

如下表所示,投入 5 5 5 单位资源即可将总耗时缩短至 5 5 5 天。此时顿顿手中还剩余 4 4 4 单位资源,但无论如何安排,也无法使总耗时进一步缩短。

i i i基础耗时 t i t_i ti缩减 1 1 1 天所需资源 c i c_i ci投入资源数量实际耗时
16115
25105
36225
47125

样例输入2

4 30 2
6 1
5 1
6 2
7 1

样例输出2

2

样例解释

投入 20 20 20 单位资源,恰好可将所有区域开垦耗时均缩短为 k = 2 k = 2 k=2 天;受限于 k k k,剩余的 10 10 10 单位资源无法使耗时进一步缩短。

子任务

70 % 70\% 70% 的测试数据满足: 0 < n , t i , c i ≤ 100 0 < n, t_i, c_i \le 100 0<n,ti,ci100 0 < m ≤ 1 0 6 0 < m \le 10^6 0<m106

全部的测试数据满足: 0 < n , t i , c i ≤ 1 0 5 0 < n, t_i, c_i \le 10^5 0<n,ti,ci105 0 < m ≤ 1 0 9 0 < m \le 10^9 0<m109


题解

对于一个天数 x x x,如果能在 x x x 天完成任务(缩短后的),必定能在 x + 1 , x + 2 , ⋯ x+1,x+2,\cdots x+1,x+2, 天内完成;反之,如果不能在 x x x 天完成任务,必定不能在 x − 1 , x − 2 , ⋯ x-1,x-2,\cdots x1,x2, 天内完成。

因此答案具有二分性,通过二分答案,找到最小的 x x x,使得能在 x x x 天完成任务,而不能再 x − 1 x-1 x1 天完成任务。

二分的 check 函数直接遍历每个开垦区域,计算每个区域缩短到 mid 天内完成需要消耗的总资源,与有的资源 m m m 去比较来判断是否满足条件。

时间复杂度: O ( n log ⁡ t ) \mathcal{O}(n\log t) O(nlogt)

参考代码(46ms,3.527MB)

/*Created by Pujx on 2024/3/19.
*/
#pragma GCC optimize(2, 3, "Ofast", "inline")
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
//#define int long long
//#define double long double
using i64 = long long;
using ui64 = unsigned long long;
using i128 = __int128;
#define inf (int)0x3f3f3f3f3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define yn(x) cout << (x ? "yes" : "no") << endl
#define Yn(x) cout << (x ? "Yes" : "No") << endl
#define YN(x) cout << (x ? "YES" : "NO") << endl
#define mem(x, i) memset(x, i, sizeof(x))
#define cinarr(a, n) for (int i = 1; i <= n; i++) cin >> a[i]
#define cinstl(a) for (auto& x : a) cin >> x;
#define coutarr(a, n) for (int i = 1; i <= n; i++) cout << a[i] << " \n"[i == n]
#define coutstl(a) for (const auto& x : a) cout << x << ' '; cout << endl
#define all(x) (x).begin(), (x).end()
#define md(x) (((x) % mod + mod) % mod)
#define ls (s << 1)
#define rs (s << 1 | 1)
#define ft first
#define se second
#define pii pair<int, int>
#ifdef DEBUG#include "debug.h"
#else#define dbg(...) void(0)
#endifconst int N = 2e5 + 5;
//const int M = 1e5 + 5;
const int mod = 998244353;
//const int mod = 1e9 + 7;
//template <typename T> T ksm(T a, i64 b) { T ans = 1; for (; b; a = 1ll * a * a, b >>= 1) if (b & 1) ans = 1ll * ans * a; return ans; }
//template <typename T> T ksm(T a, i64 b, T m = mod) { T ans = 1; for (; b; a = 1ll * a * a % m, b >>= 1) if (b & 1) ans = 1ll * ans * a % m; return ans; }int t[N], c[N];
int n, m, k, q;void work() {cin >> n >> m >> k;for (int i = 1; i <= n; i++) cin >> t[i] >> c[i];int l = k, r = 1e5, ans = r;while (l <= r) {auto check = [&] (int x) -> bool {int sum = m;for (int i = 1; i <= n; i++) {if (t[i] <= x) continue;if (sum < 1ll * (t[i] - x) * c[i]) return false;sum -= (t[i] - x) * c[i];}return true;};int mid = l + r >> 1;if (check(mid)) ans = mid, r = mid - 1;else l = mid + 1;}cout << ans << endl;
}signed main() {
#ifdef LOCALfreopen("C:\\Users\\admin\\CLionProjects\\Practice\\data.in", "r", stdin);freopen("C:\\Users\\admin\\CLionProjects\\Practice\\data.out", "w", stdout);
#endifios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int Case = 1;//cin >> Case;while (Case--) work();return 0;
}
/*_____   _   _       _  __    __|  _  \ | | | |     | | \ \  / /| |_| | | | | |     | |  \ \/ /|  ___/ | | | |  _  | |   }  {| |     | |_| | | |_| |  / /\ \|_|     \_____/ \_____/ /_/  \_\
*/

关于代码的亿点点说明:

  1. 代码的主体部分位于 void work() 函数中,另外会有部分变量申明、结构体定义、函数定义在上方。
  2. #pragma ... 是用来开启 O2、O3 等优化加快代码速度。
  3. 中间一大堆 #define ... 是我习惯上的一些宏定义,用来加快代码编写的速度。
  4. "debug.h" 头文件是我用于调试输出的代码,没有这个头文件也可以正常运行(前提是没定义 DEBUG 宏),在程序中如果看到 dbg(...) 是我中途调试的输出的语句,可能没删干净,但是没有提交上去没有任何影响。
  5. ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); 这三句话是用于解除流同步,加快输入 cin 输出 cout 速度(这个输入输出流的速度很慢)。在小数据量无所谓,但是在比较大的读入时建议加这句话,避免读入输出超时。如果记不下来可以换用 scanfprintf,但使用了这句话后,cinscanfcoutprintf 不能混用。
  6. main 函数和 work 函数分开写纯属个人习惯,主要是为了多组数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/757731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Effective-C++阅读解析条款(条款一:视C++为一个语言联邦)

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 前言 博主只是将书中内容用自己的理解写了出来&#xff0c;术语没有那么多&#xff0c;而且其中很多部分理解不是很透彻&#xff0c;对于C初学者来说&#xff0c;本专栏博客还是很有意义的&#xff0c;因为初学者看这本书通…

基于Java中的SSM框架实现快餐店线上点餐系统项目【项目源码+论文说明】

基于Java中的SSM框架实现快餐店线上点餐系统演示 摘要 随着计算机互联网的高速发展。餐饮业的发展也加入了电子商务团队。各种网上点餐系统纷纷涌现&#xff0c;不仅增加了商户的销售量和营业额&#xff0c;而且为买家提供了极大的方便&#xff0c;足不出户&#xff0c;就能订…

Vue双向数据绑定的简单实现-- Observer、Compiler、proxy

前言 双向数据绑定人人都会背了&#xff0c;已经没什么新奇了。 但是如果遇到XX喜欢问源码之类的&#xff0c;或者问你设计思路你又该如何应对呢&#xff0c;所以下面这篇文章主要是为了记录双向数据绑定的一个实现&#xff0c;采用了类的方式&#xff0c;积极向面向对象编程靠…

css实现自适应正方形

通过百分比&#xff08;%&#xff09;和宽高比通过vw或者vh通过百分比&#xff08;%&#xff09; padding-top 或者 padding-bottom以上列举三种方法&#xff0c;还有其他方法请各路大神评论区展示 展示 <style>* {margin: 0;padding: 0;}.box {width: 20%;aspect-rati…

软件测评中心:进行科技成果鉴定测试的注意事项和好处简析

软件产品科技成果鉴定是有效评价科技成果质量和水平的方法之一&#xff0c;也是鼓励科技成果通过市场竞争等方式得到有效的评价和认可&#xff0c;可以推动科技成果的进步和转化。 一、进行科技成果鉴定测试时的注意事项&#xff1a;   1、应由具备一定资质和能力的专业机构…

Android Studio实现内容丰富的安卓外卖平台

获取源码请点击文章末尾QQ名片联系&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动 项目编号122 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看公告 3.查看外卖分类 4.购物车&#xff0c; 5.个人中…

深度学习_微调_7

目标 微调的原理利用微调模型来完成图像的分类任务 微调的原理 微调&#xff08;Fine-tuning&#xff09;是一种在深度学习中广泛应用的技术&#xff0c;特别是在预训练模型&#xff08;Pretrained-Models&#xff09;的基础上进行定制化训练的过程。微调的基本原理和步骤如下…

AutoSAR配置与实践(深入篇)10.5 CANTP 层对意外到达的N-PDU处理策略

AutoSAR配置与实践(深入篇)10.5 CANTP 层对意外到达的N-PDU处理策略 CANTP 层对意外到达的N-PDU处理策略一、规范说明二、具体流程图解析2.1 发送端对意外到达的PDU的处理图解2.2 接收端对意外到达的PDU的处理图解CANTP 层对意外到达的N-PDU处理策略 ->返回总目录<- …

【项目】YOLOv5+PaddleOCR实现艺术字验证码识别

YOLOv5PaddleOCR实现艺术字类验证码识别 一、引言1.1 实现目标1.2 人手动点选验证码逻辑1.3 计算机点选逻辑 二、计算机验证方法2.1 PaddleOCR下方文字识别方法2.2 YOLOv5目标检测方法2.3 艺术字分类方法2.4 返回结果 三、代码获取 一、引言 1.1 实现目标 要识别的验证码类型…

c语言综合练习题

1.编写程序实现键盘输入一个学生的学分绩点 score&#xff08;合法的范围为:1.0—5.0&#xff09;&#xff0c;根据学生的学分绩点判定该学 生的奖学金的等级&#xff0c;判定规则如下表所示。 #include <stdio.h>int main() {float score;printf("请输入学生的学分…

Harbor-私有镜像仓库

目录 一、Harbor 原理说明 1.软件资源介绍 2.Harbor 特性 3.Harbor 认证过程 4.Harbor 认证流程 二、私有镜像仓库实验 1.环境准备 2.安装docker 3.配置镜像加速和私有仓库地址 4.搭建harbor仓库 5.本地windows浏览器访问配置 一、Harbor 原理说明 1.软件资源介绍 …

突破编程_C++_设计模式(访问者模式)

1 访问者模式的基本概念 C中的访问者模式是一种行为设计模式&#xff0c;它允许你在不修改类层次结构的情况下增加新的操作。这种模式将数据结构与数据操作解耦&#xff0c;使得操作可以独立于对象的类来定义。 访问者模式的主要组成部分包括&#xff1a; &#xff08;1&…

面试算法-62-盛最多水的容器

题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容器。…

CycleGAN训练及测试过程细节记录

CycleGAN训练及测试过程细节记录 文章目录 关于训练关于测试 关于训练 1、训练前将数据配置好&#xff0c;并在Pycharm中写好配置信息 2、关于训练过程的参数配置在 options/train_options.py options/base_options.py batch_size&#xff1a;批大小 crop_size&#xff1a;…

python实现--拓扑排序

拓扑排序是对有向无环图&#xff08;DAG&#xff09;进行排序的一种算法&#xff0c;它可以将图中的顶点排成一个线性序列&#xff0c;使得图中的任意一条有向边都从序列中的较早顶点指向较晚顶点。换句话说&#xff0c;如果图中存在一条从顶点A到顶点B的有向边&#xff0c;那么…

Android分区存储到底该怎么做

文章目录 一、Android存储结构二、什么是分区存储&#xff1f;三、私有目录和公有目录三、存储权限和分区存储有什么关系&#xff1f;四、我们应该该怎么做适配&#xff1f;4.1、利用File进行操作4.2、使用MediaStore操作数据库 一、Android存储结构 Android存储分为内部存储和…

【逆向】使用 Frida 进行 Android 应用程序动态分析与加密算法逆向

不愿染是与非 怎料事与愿违 心中的花枯萎 时光它去不回 回忆辗转来回 痛不过这心扉 愿只愿余生无悔 随花香远飞 &#x1f3b5; 毛不易《不染》 在移动应用程序开发中&#xff0c;保护用户数据的安全至关重要。加密算法是保护数据安全的重要手段之一。然而…

【晴问算法】提高篇—动态规划专题—最长上升子序列

题目描述 现有一个整数序列a1,a2,...,an​​​​​​&#xff0c;求最长的子序列&#xff08;可以不连续&#xff09;&#xff0c;使得这个子序列中的元素是非递减的。输出该最大长度。 输入描述 第一行一个正整数n&#xff08;1≤n≤100​​​​&#xff09;&#xff0c;表示序…

【进阶版讲解深度学习如何入门?】

深度学习如何入门&#xff1f; 1. 前言2. 学习基础知识3. 了解机器学习4. 编程和工具5. 深度学习基础6. 实战项目7. 高级概念8. 持续学习9. 推荐资源 1. 前言 深度学习是机器学习的一个子领域&#xff0c;它受到了生物神经网络的启发&#xff0c;依赖于构建多层的神经网络来学…

Windows 11 安装 Scoop

[Windows 11 安装 Scoop](Windows 11 安装 Scoop) 0. 引言 Scoop 从命令行安装您熟悉和喜爱的程序&#xff0c;差异最小。 它的主要功能如下&#xff1a; 消除权限弹出窗口 隐藏 GUI 向导样式的安装程序 防止PATH污染安装大量程序 避免安装和卸载程序的意外副作用 自动查…