第十四次CCF-CSP(第二题 买菜、第四题 再卖菜)

news2025/1/15 20:43:58

第十四次CCF-CSP

第二题 买菜

原题链接:3263. 买菜 - AcWing题库

思路分析

简单来说,就是给出两组区间的集合A,B 求出两集合中相交区间的部分的长度,注意若区间 [s,t] 是相交的,则长度为 t-s 。

思路一

因为数据量比较小,n<2e3. 所以可以直接暴力:

代码如下

#include<bits/stdc++.h>

using namespace std;
const int N = 2020;
int n;
int a[N], b[N], c[N], d[N];
bool f[N];
int ans;

int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i] >> b[i];
	}
	for (int i = 1; i <= n; i++)
	{
		cin >> c[i] >> d[i];
	}
	for ( int i=1;i <= n; i++)
	{
	    for(int j = 1;j<=n;j++)
	    {
	        int x=0,y=0;
	        if(c[j]>b[i] || d[j]< a[i])
	             continue;
	        x = max(a[i],c[j]);
	        y = min(b[i],d[j]);
	        ans += y-x;
	    }
	}
	cout << ans;
	return 0;
}
思路二

因为所有的区间值都在1e6之内。所以我们可以把区间内的所有值(半闭半开区间!)映射到一条长的线段上去。当出现了区间内的值,就 + 1,所以我们只需要在该线段上找到值为 2 的个数即可。

为什么要半闭半开?

因为题目要求 [s,t] 的长度为 t - s。并不是 t - s + 1。所以我们只需要在预处理的时候,少映射一位数即可。

代码如下:

#include<bits/stdc++.h>

using namespace std;
const int N = 1e6+5;
int n;
int a[N];
long long ans;

int main()
{
	cin >> n;
	int x, y,m;
	for (int i = 1; i <= n; i++)
	{
		cin >> x >> y;
		m = max(m, y);
		for (int j = x; j < y; j++)
			a[j] += 1;
	}
	for (int i = 1; i <= n; i++)
	{
		cin >> x >> y;
		m = max(m, y);
		for (int j = x; j < y; j++)
		{

				a[j] += 1;
		}
	}
	
	for (int i = 1; i <= m; i++)
	{
		int j = i+1;
		while (a[j] == 2 && j <= m)
		{
			j++;
		}
		ans += j - i - 1;
		i = j - 1;
	}
	cout << ans;
	return 0;
}



第四题 再卖菜

原题链接:3265. 再卖菜 - AcWing题库

思路分析

这道题运用了差分约束的思想,差分的结论如下:

  • 要找最大值,就等价于找最短路 a + c >= b, add(a,b,c) 即有一条从a指向b的权重为c的有向边
  • 要找最小值,就等价于找最长路 a + c <= b, add(a,b,c)

在本题中的具体推导过程见下图:
在这里插入图片描述

所以,我们可以建图如下:

for (int i = 2; i < n; i++)
{
    add(i - 2, i + 1, 3 * b[i]);	
    add(i + 1, i - 2, -(3 * b[i] + 2));
}
add(0, 2, 2 * b[1]); add(2, 0, -(2 * b[1] + 1));
add(n - 2, n, 2 * b[n]); add(n, n - 2, -(2 * b[n] + 1));
for (int i = 1; i <= n; i++)
{
    add(i - 1, i, 1);
}

建好图之后,只需要用SPFA算法跑一遍(因为有负数),求最长路即可。

void spfa()	//基本上就是套模板
{
	memset(dist, -0x3f, sizeof dist);
	dist[0] = 0;
	q.push(0);

	while (!q.empty())
	{
		int t = q.front();
		q.pop();
		st[t] = false;		//注意这里的标记数组

		for (int i = h[t]; ~i; i = ne[i])
		{
			int j = e[i];
			if (dist[j] < dist[t] + w[i])
			{
				dist[j] = dist[t] + w[i];
				st[t] = true;
			}
		}
	}
}

整体代码

#include<bits/stdc++.h>

using namespace std;

const int N = 310, M = 3 * N;
int n;
int b[N];
int h[N], e[M], ne[M], w[M], idx;
int dist[N];
queue<int> q;
bool st[N];

void add(int a, int b, int c)
{
	e[idx] = b; w[idx] = c; ne[idx] = h[a]; h[a] = idx++;
}

void spfa()
{
	memset(dist, -0x3f, sizeof dist);
	dist[0] = 0;
	q.push(0);

	while (!q.empty())
	{
		int t = q.front();
		q.pop();
		st[t] = false;

		for (int i = h[t]; ~i; i = ne[i])
		{
			int j = e[i];
			if (dist[j] < dist[t] + w[i])
			{
				dist[j] = dist[t] + w[i];
				st[t] = true;
			}
		}
	}
}

int main()
{
	cin >> n;
	memset(h, -1, sizeof h);
	for (int i = 1; i <= n; i++)
		cin >> b[i];
	for (int i = 2; i < n; i++)
	{
		add(i - 2, i + 1, 3 * b[i]);
		add(i + 1, i - 2, -(3 * b[i] + 2));
	}
	add(0, 2, 2 * b[1]); add(2, 0, -(2 * b[1] + 1));
	add(n - 2, n, 2 * b[n]); add(n, n - 2, -(2 * b[n] + 1));
	for (int i = 1; i <= n; i++)
	{
		add(i - 1, i, 1);
	}

	spfa();
	for (int i = 1; i <= n; i++)
	{
		cout << dist[i] - dist[i - 1] << " ";
	}
	return 0;
}

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

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

相关文章

传输层的UDP协议

1. UDP协议报文格式 1.1 16位端口号 UDP协议报文中&#xff0c;端口号占2个字节&#xff0c;包括 源端口号 和 目的端口号。 1.2 16位UDP长度 UDP报文长度为2个字节 &#xff0c;即UDP数据报长度为0~65535&#xff0c;也就是64kb。 1.3 16位UDP检验和 数据在网络传输的…

Opencv4.5读取视频文件失败的原因

0. 写在前面 这篇短文是对上期编译的一个补充&#xff1a;Windows11OpenCV4.5Qt5.9.1安装教程_opencv4.5.4 windows11安装-CSDN博客 1. 问题现象 上篇博文是读取图片数据成功&#xff0c;结果今天做项目&#xff0c;测试视频文件和录像时&#xff0c;发现capture.isOpened()返…

ROS2组件component自定义实现

ROS2系列文章目录 ROS2中nav_msgs/msg/Path 数据含义及使用 ROS2中std_msgs/msg/Header 数据含义及使用 ROS中TF变换详解 ROS2中launch编写及参数含义&#xff08;launch.xml、python&#xff09; 提示&#xff1a;阅读并实践本文档后&#xff0c;将掌握并理解ros1中nodele…

Python面向对象析构函数你学会了吗?

​ 当我第一次接触Python面向对象编程时&#xff0c;我完全被析构函数的概念给搞懵了。但是&#xff0c;随着我深入研究&#xff0c;我发现它其实并没有那么复杂。 1.析构函数是什么 析构函数是Python面向对象编程中的一个重要概念&#xff0c;它是在对象生命周期结束时自动调…

网工内推 | 浪潮原厂售前、方案经理,上市公司大平台,最高20K

01 浪潮集团 招聘岗位&#xff1a;售前经理 职责描述&#xff1a; 1、负责数字生态、数字教育、工业互联网、数字乡村、智慧城市、智慧交通等数字经济领域解决方案的售前工作&#xff0c;包括但不限于融合方案编制、项目调研、订制文档输出及客户咨询支持。 2、负责与公司各产…

数据完整性

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 数据完整性 数据完整性是关系数据库的一个重要特征&#xff0c;一般包含实体完整性、参照完整性和用户自定义完整性 3 种 实体完整性 实体完整性&#xff1a;规定表中的每…

VXLAN学习笔记

声明&#xff1a;该博客内容大部分参考参考链接整理 什么是VXLAN&#xff1f; VXLAN(Virtual Extensible LAN)即虚拟扩展局域网&#xff0c;是大二层网络中广泛使用的网络虚拟化技术。在源网络设备与目的网络设备之间建立一条逻辑VXLAN隧道&#xff0c;采用MAC in UDP的封装方…

Python的asyncio 多线程

-- 多线程、进程、协程是什么就不讲了&#xff0c;&#xff08;就是你理解的一边呼吸&#xff0c;一边看文章&#xff09; 仅解决问题的话&#xff0c;下边两篇不用看&#xff0c; Python 中的 async await 概念-CSDN博客 再深一点的看这个 Python中的多线程、进程、协程、…

Vue.js+SpringBoot开发个人健康管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 健康档案模块2.2 体检档案模块2.3 健康咨询模块 三、系统展示四、核心代码4.1 查询健康档案4.2 新增健康档案4.3 查询体检档案4.4 新增体检档案4.5 新增健康咨询 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpri…

【项目设计】基于Httplib和Mysql的视频播放

项目源码&#xff08;绝对可以直接运行&#xff09; 一、项目介绍 1. 对视频播放系统的认识 搭建视频共享播放服务器&#xff0c;可以让所有人通过浏览器访问服务器&#xff0c;实现视频的上传查看&#xff0c;以及管理并播放的功能。主要是完成服务器端的程序业务功能的实现…

腾讯云轻量4核8G12M服务器性能如何?价格感人

腾讯云轻量4核8G12M服务器配置446元一年&#xff0c;646元12个月&#xff0c;腾讯云轻量应用服务器具有100%CPU性能&#xff0c;系统盘为180GB SSD盘&#xff0c;12M带宽下载速度1536KB/秒&#xff0c;月流量2000GB&#xff0c;折合每天66.6GB流量&#xff0c;超出月流量包的流…

springboot276基于JS的个人云盘管理系统的设计与实现

个人云盘管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装个人云盘管理系统软件来发挥其…

开发反应式API

开发反应式API 开发反应式API1 使用SpringWebFlux1.1 Spring WebFlux 简介1.2 编写反应式控制器 2 定义函数式请求处理器3 测试反应式控制器3.1 测试 GET 请求3.2 测试 POST 请求3.3 使用实时服务器进行测试 4 反应式消费RESTAPI4.1 获取资源4.2 发送资源4.3 删除资源4.4 处理错…

大话设计模式——7.抽象工厂模式(Abstract Factory Pattern)

1.介绍 抽象工厂模式是工厂模式的进一步优化&#xff0c;提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们具体的类。属于创建型模式。 UML图&#xff1a; 2.示例 车辆制造工厂&#xff0c;不仅可以制造轿车也可以用来生产自行车。 1&#xff09;Abs…

【技术类-02】python实现docx段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

作品展示 背景需求&#xff1a; 制作周计划时&#xff0c;需要将周计划docx内所有的表格里的手动换行符&#xff08;软回车&#xff09;”变成“段落标记&#xff08;硬回车&#xff09;”&#xff0c; 全部改成段落标记&#xff08;硬回车&#xff09; 但是19份docx每份都要打…

人工智能入门学习笔记1:什么是人工智能

一、什么是人工智能 人工智能(Artificial Intelligence)&#xff0c;是一个以计算机科学&#xff08;Computer Science&#xff09;为基础&#xff0c;由计算机、心理学、哲学等多学科交叉融合的交叉学科、新兴学科&#xff0c;研究、开发用于模拟、延伸和扩展人的智能的理论、…

day06、07-MySQL

文章目录 一、MySQL概述1.1 安装1.2 数据模型1.3 SQL简介1.3.1 SQL通用语法1.3.2 分类 二. 数据库设计-DDL2.1 项目开发流程2.2 数据库操作2.2.1 查询数据库2.2.2 创建数据库2.2.3 使用数据库2.2.4 删除数据库 2.3 图形化工具2.3.1 介绍2.3.2 安装2.3.3 使用2.2.3.1 连接数据库…

Docker 容器化技术:构建高效、可移植的开发环境和部署流程|Docker 网络

为了支持网络协议栈的多个实例&#xff0c;Linux 在网络协议栈中引入了网络命名空间。这些独立的协议栈被隔离到不同的命名空间中&#xff0c;处于不同命名空间中的网络协议栈是完全隔离的&#xff0c;彼此无法通信。通过对网络资源的隔离&#xff0c;就能在一台宿主机上虚拟多…

【ACW 服务端】页面操作Java增删改查代码生成

版本: 1.2.2-JDK17-SNAPSHOT 项目地址&#xff1a;wu-smart-acw 演示地址&#xff1a;演示地址 admin/admin Java增删改查代码生成 找到对应菜单 选择你需要的数据实例 选择数据库 选择数据库表 选择客户端&#xff08;如果是本地ACW服务代码启动默认注册上的客户端ID是…

错误:npm ERR! code CERT_HAS_EXPIRED 解决

问题&#xff1a; 在打开项目用npm install安装依赖时报错&#xff1a;npm ERR! code CERT_HAS_EXPIRED如下图&#xff1a; 原因&#xff1a; 说明正在尝试访问的npm registry 淘宝npm镜像源 的SSL证书已经过期&#xff0c;导致无法建立安全连接。 解决&#xff1a; 配置不…