【CSP CCF记录】201809-2第14次认证 买菜

题目

样例输入

4
1 3
5 6
9 13
14 15
2 4
5 7
10 11
13 14

样例输出

3

 

思路

易错点:仅考虑所给样例,会误以为H和W两人的装车时间是一一对应的,那么提交结果的运行错误就会让你瞬间清醒。

本题关键是认识到H和W的装车时间不一定一一对应,需要使用k1,k2两个不同的迭代变量分别标记两人的装车时间片。

主要分为以下两种情况:

H一个装车时间片可能对应好几个W的装车时间片,因此,若W的某次装车率先结束而H的本次装车并未结束,即h[k1].end>w[k2].end,就需要k2++。

代码

数组写法

#include<bits/stdc++.h>
using namespace std;
int n;
const int N=2010;
int main()
{
	int a[N],b[N],c[N],d[N];
	cin>>n;
	for(int i=0;i<n;i++)//小H的装车时间段 
	{
		cin>>a[i]>>b[i];
	}
	for(int i=0;i<n;i++)//小W的装车时间段 
	{
		cin>>c[i]>>d[i];
	}
	long long ans=0;
	int k1=0,k2=0;
	while(k1<n&&k2<n)
	{
		//1.H和W的两段装车时间完全不相交 
		if(b[k1]<c[k2])k1++;
		else if(d[k2]<a[k1])k2++;
		else//2.H和W的两段装车时间有相交 
		{
			int temp1,temp2;
		    temp1=max(a[k1],c[k2]);
		    temp2=min(b[k1],d[k2]);
		    ans+=(temp2-temp1);
		    
		    if(b[k1]<d[k2])k1++;
		    else k2++;
		    
		}
	 } 

	cout<<ans;
	return 0;
}

结构体写法

#include<bits/stdc++.h>
using namespace std;
const int N=2010;
struct time{
	int beg,end;
}h[N],w[N];
int main(){
	int n;
	long long ans=0;
	int k1=0,k2=0;	
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>h[i].beg>>h[i].end;
	}
	for(int i=0;i<n;i++){
		cin>>w[i].beg>>w[i].end;
	}

	while(k1<n&&k2<n){
		
		if(h[k1].end<w[k2].beg)k1++;
		else if(w[k2].end<h[k1].beg)k2++;
		else{
			int temp1,temp2;
		    temp1=max(h[k1].beg,w[k2].beg);
		    temp2=min(h[k1].end,w[k2].end);
		    ans+=(temp2-temp1);
			
			if(h[k1].end<w[k2].end)k1++;
			else k2++;
		}
		
	}
	cout<<ans; 
	return 0;
}

 运行结果

数组写法

 结构体写法

反思1——用结构体代替多个数组减少运行时间

理论上说,定义多个数组可能会导致运行时间过长的原因通常涉及到 内存访问效率数据局部性 的问题。而使用 结构体 替代多个数组,可以通过改善数据的布局和内存访问模式来提高程序的性能,减少运行时间。

假设你在代码中定义了多个数组,类似于以下的情况:

int x[1000];
int y[1000];
int z[1000];

每个数组是一个独立的内存块,存储在内存中的位置可能相隔较远。这种布局会导致以下几个问题:

  • 内存访问局部性差
  • 数据不连续,增加了缓存未命中的概率
  • 内存对齐问题

如果这些数组彼此之间的元素是相关联的,比如三维空间中的一个点,就可以使用结构体可以将相关的数据放到一个内存结构中,从而减少内存分散,提高内存访问效率。

struct Point {
    int x;
    int y;
    int z;
};

Point points[1000];

在本题中,可以对比“数组写法”和“结构体写法”的运行时间,虽然这种改进微乎其微,但是为我们提供了一个减少运行时间的思路。

反思2——在使用if语句时注意对所有情况进行全面的讨论

这道简单题卡壳了很长时间,最终发现是出现了以下的小错误:

正确写法

if(h[k1].end<w[k2].end)k1++;
else k2++;

而我写成了

if(h[k1].end<w[k2].end)k1++;
else if(h[k1].end>w[k2].end)k2++;

显然我没有考虑到h[k1].end=w[k2].end的情况,导致好几个用例运行时间过长,真是失之毫厘,谬以千里,特此记录,引起注意。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

道品智能科技移动式水肥一体机:农业灌溉施肥的革新之选

在现代农业的发展进程中&#xff0c;科技的力量正日益凸显。其中&#xff0c;移动式水肥一体机以其独特的可移动性、智能化以及实现水肥一体化的卓越性能&#xff0c;成为了农业领域的一颗璀璨新星。它不仅改变了传统的农业灌溉施肥方式&#xff0c;更为农业生产带来了高效、精…

【PCB设计】AD16教程:分配位号

1、前提条件 确保已经基本画完原理图 2、点击【Tools-Annotate Schematics】 3、依次点击【Reset All】、【Update Changes Lise】、【Close】 最后位号就被自动分配好了

20241125编译友善之臂的NanoPi R3S开发板【RK3566】STEP-BY-STEP版本

20241125编译友善之臂的NanoPi R3S开发板【RK3566】STEP-BY-STEP版本 2024/11/25 15:59 20241125编译友善之臂的NanoPi R3S开发板【RK3566】精简步骤 2024/11/25 19:37 viewproviewpro-ThinkBook-16-G5-IRH:~$ viewproviewpro-ThinkBook-16-G5-IRH:~$ df -h viewproviewpro-T…

uniapp实际开发遇到过的问题(持续更新中....)

1. 在ios模拟器上会出现底部留白的情况 解决方案&#xff1a; 在manifest.json文件&#xff0c;找到开源码视图配置&#xff0c;添加如下&#xff1a; "app-plus" : {"safearea":{"bottom":{"offset" : "none" // 底部安…

计算机网络:应用层知识点概述及习题

网课资源&#xff1a; 湖科大教书匠 1、概述 习题1 1 在计算机网络体系结构中&#xff0c;应用层的主要功能是 A. 实现进程之间基于网络的通信 B. 通过进程之间的交互来实现特定网络应用 C. 实现分组在多个网络上传输 D. 透明传输比特流 2 以下不属于TCP/IP体系结构应用层范畴…

数据治理:在企业数据管理中的关键角色与实现路径——《DAMA 数据管理知识体系指南》读书笔记- 第 3 章

文章目录 1. 数据治理的核心内涵与战略价值2. 数据治理的驱动因素&#xff1a;不仅仅是合规3. 数据治理的组织模型&#xff1a;选择适合企业结构的运营模式4. 实施数据治理的关键步骤&#xff1a;战略、制度和文化5. 数据治理工具的选择&#xff1a;支持业务与流程的高效管理6.…

递推概念和例题

一、什么是递推 递推算法以初始值为基础&#xff0c;用相同的运算规律&#xff0c;逐次重复运算&#xff0c;直至求出问题的解&#xff0c;它的本质是按照固定的规律逐步推出&#xff08;计算出&#xff09;下一步的结果 这种从“起点”重复相同的的方法直至到达问题的解&…

【Android】RecyclerView回收复用机制

概述 RecyclerView 是 Android 中用于高效显示大量数据的视图组件&#xff0c;它是 ListView 的升级版本&#xff0c;支持更灵活的布局和功能。 我们创建一个RecyclerView的Adapter&#xff1a; public class MyRecyclerView extends RecyclerView.Adapter<MyRecyclerVie…

websocket是什么?

一、定义 Websocket是一种在单个TCP连接上进行全双工通信的协议&#xff0c;它允许服务器主动向客户端推送数据&#xff0c;而不需要客户端不断的轮询服务器来获取数据 与http协议不同&#xff0c;http是一种无状态的&#xff0c;请求&#xff0c;响应模式的协议(单向通信)&a…

已存大量数据的mysql库实现主从各种报错----解决方案

背景何谓“先死后生”本文使用技术1、实施流程图2、实施2.1、数据库备份2.2、搭建Mysql的Master-Slave2.2.1、准备工作2.2.2、开始部署2.2.3、账号配置2.2.4、slave 同步配置2.2.5、验证 2.3、Master做数据恢复 结语 背景 计划对已有大量数据的mysql库的主从搭建&#xff0c;使…

SAP 零售方案 CAR 系统的介绍与研究

前言 当今时代&#xff0c;零售业务是充满活力和活力的业务领域之一。每天&#xff0c;由于销售运营和客户行为&#xff0c;它都会生成大量数据。因此&#xff0c;公司迫切需要管理数据并从中检索见解。它将帮助公司朝着正确的方向发展他们的业务。 这就是为什么公司用来处理…

模电复习易错题

PN 结&#xff1a;PN 结是由 P 型半导体和 N 型半导体通过特殊工艺结合在一起形成的结构。P 型半导体中多子是空穴&#xff0c;N 型半导体中多子是电子。内建电场&#xff1a;在 PN 结形成时&#xff0c;由于 P 区和 N 区载流子浓度的差异&#xff0c;会在结区形成一个内建电场…

AI安全:从现实关切到未来展望

近年来&#xff0c;人工智能技术飞速发展&#xff0c;从简单的图像识别到生成对话&#xff0c;从自动驾驶到医疗诊断&#xff0c;AI技术正深刻改变着我们的生活。然而&#xff0c;伴随着这些进步&#xff0c;AI的安全性和可控性问题也日益凸显。这不仅涉及技术层面的挑战&#…

nfs网络文件系统

NFS(Network File system&#xff0c;网络文件系统)是由SUN公司研制的UNIX表示层协议&#xff0c;它允许网络中的计算机(不同的计算机、不同的操作系统)之间通过TCP/IP网络共享资源&#xff0c;主要在unix系列操作系统上使用。在NFS的应用中&#xff0c;本地NFS的客户端应用可以…

mac终端配置-支持 git branch

mac 终端一般使用的是 zsh&#xff1b; 由于不想安装三方的软件&#xff0c;可以自行编写脚本实现一些效果&#xff1b; 最终效果如下&#xff0c;支持显示git 分支&#xff1a; git_branch(){branch"git branch 2>/dev/null | grep "^\*" | sed -e "…

tableau练习-制作30个图表

一、导入数据 1、导入数据 -添加-添加连接-到文件-excel格式用第一个excel导入&#xff0c;csv格式用第二个文本格式导入 2、连接数据 -从旁边这里直接拖到中间 标头连接 -日期若不一致需调节日期格式 3、保存数据 点击数据提取-再保存数据&#xff0c;保存为twbx格式 二、设计…

使用八爪鱼爬虫抓取汽车网站数据,分析舆情数据

我是做汽车行业的&#xff0c;可以用八爪鱼爬虫抓取汽车之家和微博上的汽车文章内容&#xff0c;分析各种电动汽车口碑数据。 之前&#xff0c;我写过很多Python网络爬虫的案例&#xff0c;使用requests、selenium等技术采集数据&#xff0c;这次尝试去采集小米SU7在微博、汽车…

【HarmonyOS开发实战】使用animation 和 animateTo来制作按钮动画(实现点击按钮释出更多小按钮)

如果你想在页面中添加按钮来实现页面跳转或者其他操作&#xff0c;又觉得过多的按钮太占地方&#xff0c;造成界面不美观。 那么我们可以将多个按钮“压缩”到一个按钮中&#xff0c;如下 在开始开发前&#xff0c;我们先了解一下animation和animateTo的区别。 animation&am…

国家级资质!同驭汽车获得CNAS实验室认证

近日&#xff0c;同驭汽车科技顺利通过中国合格评定国家认可委员会&#xff08;简称CNAS&#xff09;评审&#xff0c;获得《中国合格评定国家认可委员会实验室认可证书》。这标志着同驭已建立国际标准的实验室管理体系&#xff0c;产品的试验与检测技术能力达到了国际认可的准…

选择使用whisper.cpp进行语音转文字

需要将一些wav格式的语音文件转成文字&#xff08;ASR&#xff0c;STT&#xff09;&#xff0c;接到这个任务后&#xff0c;首先上网搜索有没有现成免费的工具或服务可以使用。常用的关键字如“语音转文字 免费 在线”。 搜到的很多野鸡网站&#xff0c;都可以免注册免费提供短…