CCF CAT- 全国算法精英大赛(2024第二场)往届真题练习 4 | 珂学家


前言

在这里插入图片描述



餐馆

在这里插入图片描述

思路:可撤销的0-1背包

考察了多个知识点,包括

  • 差分技巧
  • 离线思路
  • 0-1背包

不过这题卡语言,尤其卡python

import java.io.*;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;public class Main {static final long mod = (long)1e9 + 7;public static void main(String[] args) {AReader scanner = new AReader();PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));// 读取n和vint n = scanner.nextInt();int v = scanner.nextInt();// 读取并处理物品信息List<int[]> packs = new ArrayList<>();List<int[]> ops = new ArrayList<>();for (int i = 0; i < n; i++) {int s = scanner.nextInt();int e = scanner.nextInt();int w = scanner.nextInt();packs.add(new int[]{s, e, w});ops.add(new int[]{s, 1, w});ops.add(new int[]{e + 1, -1, w});}// 对ops按时间排序ops.sort(Comparator.comparingInt(a -> a[0]));// 读取q和查询时间int q = scanner.nextInt();int[] arr = IntStream.range(0, q).map(i -> scanner.nextInt()).toArray();// 将查询和索引关联起来List<int[]> qs = IntStream.range(0, q).mapToObj(i -> new int[]{arr[i], i}).collect(Collectors.toList());qs.sort(Comparator.comparingInt(a -> a[0]));// 互斥的两类long[] dp1 = new long[v + 1];long[] dp2 = new long[v + 1];// 初始化dp2dp2[0] = 1;for (int[] pack : packs) {int s = pack[0];int w = pack[2];for (int m = v - w; m >= 0; m--) {dp2[m + w] += dp2[m];dp2[m + w] %= mod;}}dp1[0] = 1;// 双指针,离散做法int p1 = 0;int p2 = 0;int[][] res = new int[q][2];for (int i = 0; i < 101; i++) { // 假设结束时间不超过arr[q-1]while (p1 < ops.size() && ops.get(p1)[0] <= i) {int[] op = ops.get(p1);int d = op[1];int w = op[2];if (d == 1) {add01(dp1, w, v);remove01(dp2, w, v);} else {remove01(dp1, w, v);add01(dp2, w, v);}p1++;}// 找到fz和bzint fz = 0;for (int j = v; j >= 0; j--) {if (dp1[j] > 0) {fz = j;break;}}int bz = 0;for (int j = v - fz; j >= 0; j--) {if (dp2[j] > 0) {bz = j;break;}}// 填充结果while (p2 < qs.size() && qs.get(p2)[0] <= i) {res[qs.get(p2)[1]][0] = fz;res[qs.get(p2)[1]][1] = bz;p2++;}}// 输出结果for (int[] pair : res) {out.println(pair[0] + " " + pair[1]);}out.flush();out.close();}private static void add01(long[] dp, int w, int v) {for (int u = v - w; u >= 0; u--) {dp[u + w] += dp[u];dp[u + w] %= mod;}}private static void remove01(long[] dp, int w, int v) {for (int u = 0; u <= v - w; u++) {dp[u + w] -= dp[u];dp[u + w] = (dp[u + w] % mod + mod) % mod;// 注意:在Java中,如果dp[u]是0或负数,可能需要额外的逻辑来避免负数}}staticclass AReader {private BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));private StringTokenizer tokenizer = new StringTokenizer("");private String innerNextLine() {try {return reader.readLine();} catch (IOException ex) {return null;}}public boolean hasNext() {while (!tokenizer.hasMoreTokens()) {String nextLine = innerNextLine();if (nextLine == null) {return false;}tokenizer = new StringTokenizer(nextLine);}return true;}public String nextLine() {tokenizer = new StringTokenizer("");return innerNextLine();}public String next() {hasNext();return tokenizer.nextToken();}public int nextInt() {return Integer.parseInt(next());}public long nextLong() {return Long.parseLong(next());}}}

python 版本被卡常

# coding=utf-8
# coding=utf-8
import sys
input=sys.stdin.buffer.readlinen, v = list(map(int, input().split()))ops = []
packs = []
for i in range(n):s, e, w = list(map(int, input().split()))packs.append((s, e, w))ops.append((s, 1, w))ops.append((e + 1, -1, w))
ops.sort(key=lambda x: x[0])t1, t2 = 100, 0
q = int(input())
arr = list(map(int, input().split()))
qs = []
for i in range(q):qs.append((arr[i], i))t1 = min(t1, arr[i])t2 = max(t2, arr[i])
qs.sort(key=lambda x: [0])# 互斥的两类
dp1 = [0] * (v + 1)
dp2 = [0] * (v + 1)#--------------------------------dp2[0] = 1
for (s, e, w) in packs:for m in range(v - w, -1, -1):dp2[m + w] += dp2[m]dp1[0] = 1def add01(dp, w):for u in range(v - w, -1, -1):dp[u + w] += dp[u]def remove01(dp, w):for u in range(0, v - w + 1):dp[u + w] -= dp[u]# 双指针,离散做法
res = [[]] * q
p1, p2 = 0, 0
for i in range(t1, t2 + 1):while p1 < len(ops) and ops[p1][0] <= i:d = ops[p1][1]if d == 1:add01(dp1, ops[p1][2])remove01(dp2, ops[p1][2])elif d == -1:remove01(dp1, ops[p1][2])add01(dp2, ops[p1][2])p1 += 1# print (i, dp1, dp2)fz = max([i for i in range(v + 1) if dp1[i] > 0])bz = max([i for i in range(v + 1) if dp2[i] > 0 and i <= (v - fz)])while p2 < len(qs) and qs[p2][0] <= i:res[qs[p2][1]] = (fz, bz)p2 +=  1# for (fz, bz) in res:
#     print (fz, bz)print ("\n".join(map(lambda x: str(x[0]) + " "+ str(x[1]), res)))

写在最后

在这里插入图片描述

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

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

相关文章

C#开发的应用升级更新服务器端工具 - 开源研究系列文章 - 个人小作品

笔者开发过一些小应用&#xff0c;然后这些应用就需要有升级更新的功能&#xff0c;但是如果每个都集成进去也行&#xff0c;但是就是得写死更新的代码了。于是就想写一个应用升级更新的管理器&#xff0c;以前看到过Github上有一个AutoUpdate.Net&#xff0c;不过它那个要集成…

2024最新VMware Workstation Pro下载教程

自从2024年5月份之后&#xff0c;VMware workstation player就不能直接在vm官网下载,需要到broadcom博通网站上下载 下面介绍最新下载步骤&#xff1a; 百度直接搜索vmware 进入官网点击Workstation Pro链接 博通注册对应的账号 现在下载都需到博通注册对应的账号 登录邮…

展台设计需要注意哪些问题

一、明确设计目标与主题 在设计之前需要明确展台设计目标和主题。设计目标是指展台设计所要达到的目的和效果&#xff0c;提高企业知名度、促进产品销售等&#xff1b;设计主题则是展台设计的核心和灵魂&#xff0c;贯穿整个展台设计的风格和形式。参展企业需要清晰地界定设计目…

Linux常用环境Docker安装

一、mysql安装 简单安装 docker run -d \--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORD123 \mysql mysql容器本地挂载 cd /usr mkdir mysql cd mysql/ mkdir data mkdir conf mkdir init可以手动导入自己的数据库信息 docker run -d \--name mys…

@Transactional事务注解内含乾坤?

文章目录 前置知识实战1、无事务操作2、事务操作 总结 前置知识 MyBatis中的工作原理 读取配置文件&#xff1a;数据库连接信息、事务管理信息以及映射文件的位置加载映射文件&#xff1a;加载Mapper.xml这些映射文件&#xff0c;解析其中的 SQL 语句和结果映射信息创建 SqlS…

如何在Windows 10上的命令提示符下更改目录?这里提供方法

如果你刚开始在Windows 10上使用命令提示符,你需要知道如何更改目录。 如何在Windows上打开命令提示符 随着你对Windows 10上的命令提示符越来越熟悉,你需要学习的第一件事是如何更改操作系统文件系统中的目录。有几种方法可以做到这一点,所以我们将带你了解它们。 注意:…

JCR一区级 | Matlab实现TCN-LSTM-MATT时间卷积长短期记忆神经网络多特征分类预测

JCR一区级 | Matlab实现TCN-LSTM-MATT时间卷积长短期记忆神经网络多特征分类预测 目录 JCR一区级 | Matlab实现TCN-LSTM-MATT时间卷积长短期记忆神经网络多特征分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.JCR一区级 | Matlab实现TCN-LSTM-MATT时间卷积长短…

问界新M7 Ultra仅售28.98万元起,上市即交付

5月31日&#xff0c;问界新M7 Ultra正式上市。发布会上&#xff0c;鸿蒙智行旗下多款产品交出最新答卷——问界新M5上市1个月大定突破2万台&#xff1b;智界S7位列30万纯电轿车4月交付量NO.3&#xff1b;问界M9上市5个月大定突破9万台。其中&#xff0c;作为中国高端豪华SUV市场…

STM32CubeMX重新生成代码时如何避免用户代码被覆盖

STM32CubeMX对于在STM32芯片上开发程序非常方便&#xff0c;但是有时发现&#xff1a;使用STM32CubeMX生成keil工程后&#xff0c;在这个工程上开发了一段时间&#xff0c;然后又有外设需要配置&#xff0c;这时使用STM32CubeMX打开MX工程开启外设&#xff0c;最后重新生成keil…

项目启动 | 宏昌电器牵手盘古信息,数字化制造引领企业高质量发展

随着时代的发展&#xff0c;数字化转型已成为实现企业持续增长和塑造竞争优势不可或缺的关键因素。浙江宏昌电器科技股份有限公司&#xff08;以下简称为“宏昌电器”&#xff09;围绕企业战略发展需求&#xff0c;积极加速数字化转型升级进程&#xff0c;以数字化力量推动公司…

docker-compose jira、bugzilla

一、jira 同这篇文章&#xff1a; linux docker 部署破解版本jira:8.4.0——测试体验(非商用)_jira docker-CSDN博客 直到构建完破解版本的镜像就可以了&#xff5e; 二、bugzilla 1. 拉取镜像&#xff1a; 官网镜像搜索bugzilla&#xff0c;第一个就是&#xff1a; 直接…

基于51单片机的电子时钟设计

在单片机技术日趋成熟的今天&#xff0c;其灵活的硬件电路和软件电路的设计&#xff0c;让单片机得到广泛的应用&#xff0c;几乎是从小的电子产品&#xff0c;到大的工业控制&#xff0c;单片机都起到了举足轻重的作用。单片机小的系统结构几乎是所有具有可编程硬件的一个缩影…

计算机图形学入门04:视图变换

1.MVP变换 将虚拟场景中的模型投影到屏幕上&#xff0c;也就是二维平面上&#xff0c;需要分三个变换。 1.首先需要知道模型的位置&#xff0c;也就是前面提到的基本变换&#xff0c;像缩放、平移&#xff0c;旋转&#xff0c;也称为模型(Model)变换。 2.然后需要知道从…

归并排序C++代码详解,思路流程+代码注释,带你完全学会归并排序

归并排序 归并排序是一种经典的排序算法&#xff0c;属于分治算法的一种。其核心思想是将一个大问题分解成若干个较小的子问题来解决&#xff0c;然后根据子问题的解构建原问题的解。在排序问题中&#xff0c;归并排序将数组分成两半&#xff0c;分别对这两半进行排序&#xf…

车载软件架构 - AP AUTOSAR 设计思想及原理

车载软件架构 - AP AUTOSAR 设计思想及原理 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消…

物联网实战--平台篇之(十一)设备管理后台

目录 一、设备数据库 二、添加设备 三、排序设备 四、重命名设备 五、删除设备 六、移动设备 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/categ…

港科夜闻 | 香港科大于首尔高峰论坛分享三十载发展里程,并与韩国知名机构学府加强交流...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大于首尔高峰论坛分享三十载发展里程&#xff0c;并与韩国知名机构学府加强交流。香港科大致力加强与韩国机构和产业的联系&#xff0c;大学高层管理人员于5月29-30日出席首尔一个备受瞩目的论坛&#xff0c;并与当…

Codeforces Round 949 (Div. 2 ABCD) 视频讲解

A. Turtle and Piggy Are Playing a Game Problem Statement Turtle and Piggy are playing a number game. First, Turtle will choose an integer x x x, such that l ≤ x ≤ r l \le x \le r l≤x≤r, where l , r l, r l,r are given. It’s also guaranteed that …

OpenAI 的 GPT-4o 是目前最先进的人工智能模型!如何在工作或日常生活中高效利用它?

OpenAI 的 GPT-4o 是目前最先进的人工智能模型&#xff01;如何在工作或日常生活中高效利用它&#xff1f; 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大…

RabbitMQ延时队列

一、RabbitMQ下载并使用插件 1、查看RabbitMQ插件的文件路径 docker inspect rabbitmq 找到Mounts下面Name:rabbitmq_plugin的Source即为插件路径 使用 cd 进入到该目录 2、下载插件 wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download…