news 2026/5/20 17:47:34

P1281 书的复制【洛谷算法习题】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
P1281 书的复制【洛谷算法习题】

P1281 书的复制

网页链接

P1281 书的复制

题目背景

大多数人的错误原因:尽可能让前面的人少抄写,如果前几个人可以不写则不写,对应的人输出0 0

不过,已经修改数据,保证每个人都有活可干。

题目描述

现在要把m mm本有顺序的书分给k kk个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一、第三、第四本书给同一个人抄写。

现在请你设计一种方案,使得复制时间最短。复制时间为抄写页数最多的人用去的时间。

输入格式

第一行两个整数m , k m,km,k

第二行m mm个整数,第i ii个整数表示第i ii本书的页数。

输出格式

k kk行,每行两个整数,第i ii行表示第i ii个人抄写的书的起始编号和终止编号。k kk行的起始编号应该从小到大排列,如果有多解,则尽可能让前面的人少抄写。

输入输出样例 #1

输入 #1

9 3 1 2 3 4 5 6 7 8 9

输出 #1

1 5 6 7 8 9

说明/提示

1 ≤ k ≤ m ≤ 500 1\le k \le m \le 5001km500,所有书的页数都是正整数且不超过10 4 10^4104

解题思路

本题是经典的二分答案+贪心分配问题,核心求解最短抄写时间并输出分配方案。采用二分查找确定最小复制时间:左边界为单本书的最大页数,右边界为所有书的总页数。通过check函数从后往前贪心分配书籍,统计完成抄写所需的最少人数,若人数不超过规定人数则当前时间可行。找到最短时间后,再次从后往前划分书籍,确保前面的人抄写数量最少(满足题目多解要求),最后将划分结果反转,按顺序输出每个人的抄写区间。算法时间复杂度低,完美适配题目数据范围。

总结

核心逻辑:二分答案求解最小最大抄写时间,反向贪心分配书籍满足「前面的人少抄写」的规则。
关键操作:二分边界初始化、反向贪心校验人数、反向划分区间后反转输出。
效率保障:二分配合贪心策略,计算简洁高效,严格符合题目输出要求。

代码内容

#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e3+10;constll INF=1e18;constll M=1e6+10;constll mod=1e9+7;ll n,m;ll a[505];ll x[505],y[505];boolcheck(ll s){ll num=1,t=0;for(ll i=n;i>=1;i--){if(t+a[i]>s)t=0,num++;t+=a[i];}returnnum<=m;}llfind(ll low,ll high){ll mid;while(low+1<high){mid=low+(high-low)/2;if(check(mid))high=mid;elselow=mid;}returnhigh;}intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);ll low=0,high=0;cin>>n>>m;for(ll i=1;i<=n;i++){cin>>a[i];high+=a[i];low=max(low,a[i]);}ll s=find(low,high);ll t=0,num=1;for(ll i=1;i<=m;i++)x[i]=y[i]=0;y[1]=n;for(ll i=n;i>=1;i--){if(t+a[i]>s){t=0;x[num]=i+1;y[++num]=i;}t+=a[i];}x[num]=1;for(ll i=m;i>=1;i--)cout<<x[i]<<" "<<y[i]<<endl;return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 17:47:32

在openclaw工具中一键写入taotoken配置以驱动ai工作流

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在OpenClaw工具中一键写入Taotoken配置以驱动AI工作流 基础教程类&#xff0c;面向使用OpenClaw构建AI工作流或Agent的开发者&…

作者头像 李华
网站建设 2026/5/20 17:47:23

终极免费QQ音乐格式转换指南:3分钟解锁加密音乐播放自由

终极免费QQ音乐格式转换指南&#xff1a;3分钟解锁加密音乐播放自由 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录&#xff0c;默认…

作者头像 李华
网站建设 2026/5/20 17:47:13

Java面试必背|线程数量配置(不只会CPU/IO密集型,面试加分版)

前言&#xff1a;Java并发面试中&#xff0c;“如何配置线程数量”绝对是高频题&#xff0c;但80%的面试者只会背“CPU密集型1&#xff0c;IO密集型2”的基础结论&#xff0c;一被追问实战细节就翻车&#xff01;今天直奔標竿带大家吃透底层逻辑&#xff0c;结合代码示例和真实…

作者头像 李华
网站建设 2026/5/20 17:46:05

RevokeMsgPatcher:Windows平台即时通讯软件二进制补丁技术深度解析

RevokeMsgPatcher&#xff1a;Windows平台即时通讯软件二进制补丁技术深度解析 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https:…

作者头像 李华
网站建设 2026/5/20 17:45:31

零依赖实现java8项目中集成deepseek做简单对话功能

原理&#xff1a;JDK 8与DeepSeek API天然兼容&#xff0c;因为DeepSeek的API采用RESTful设计规范&#xff0c;与JDK 8内置的HttpURLConnection或第三方库&#xff08;如Apache HttpClient 4.5.x、OkHttp&#xff09;完全兼容 1.获取deepseek的apikey 网址&#xff1a;DeepSe…

作者头像 李华