首页 > 其他分享 >【CUMTOJ】法师康工人(代码细节控制)

【CUMTOJ】法师康工人(代码细节控制)

时间:2024-03-23 18:00:41浏览次数:33  
标签:right end int workers worker start 细节 法师 CUMTOJ

题目描述

image

代码

#include<bits/stdc++.h>
using namespace std;
class worker{
	public:
		int start;
		int end;
		worker(){
			
		}
		worker(int a, int b){
			start = a; end = b;
		}
};

bool cmp(worker w1, worker w2){
	return w1.start < w2.start;
}
int main(){
	int N;
	cin>>N;
	vector<worker> workers;
//	vector<int> start;
//	vector<int> end;
	int n = N;
	while(n--){
		int a,b;
		cin>>a>>b;
		worker w(a,b);
		workers.push_back(w);
	} 
	sort(workers.begin(), workers.end(), cmp);
	
//	for(int i = 0; i < N; i++){
//		cout<<workers[i].start<<" "<<workers[i].end<<endl;
//	}
	
	int left,right;
	left = workers[0].start; right = workers[0].end;
	int MAX = right - left;
	int gap = 0;
	
	for(int i = 1; i < N; i++){
		if(workers[i].start <= right){
			right = max(right, workers[i].end );
			MAX = max(right - left,MAX);//这里 
		}else{
			gap = max(workers[i].start - right, gap);
			left = workers[i].start;
			right = max(right, workers[i].end);
			MAX = max(right - left, MAX);
		}
	}
	cout<<MAX<<" "<<gap;
	return 0;
}

贴一下我参考的题解:
https://www.cnblogs.com/wafish/p/10465503.html
这道题是一道贪心,在算法上并不太难,但是在代码实现上很麻烦。
首先,在应用贪心之前需要定义结构体或类来存储工人的起止时间,然后对工人的数据按起始时间进行升序排列,创造使用贪心的条件,不然的话你会发现如果在遍历过程中起始时间一会往前一会往后,根本没办法用贪心。
第二个难点就是遍历过程中的操作。

int left,right;
	left = workers[0].start; right = workers[0].end;
	int MAX = right - left;
	int gap = 0;
	
	for(int i = 1; i < N; i++){
		if(workers[i].start <= right){
			right = max(right, workers[i].end );
			MAX = max(right - left,MAX);//这里 
		}else{
			gap = max(workers[i].start - right, gap);
			left = workers[i].start;
			right = max(right, workers[i].end);
			MAX = max(right - left, MAX);
		}
	}

我刚开始犯的一个错误就是理解错了题意,gap指的是从第一个工人开始工作的间隔,而不是从6:00开始的间隔,所以gap应该初始化为0
另外,当遇到断层时,left和right需要重新开始计算,但是MAX不一定,因为最长连续工作时间不一定会更新,所以无论有没有出现断层,都要有MAX = max(right - left,MAX);
以后如果遇到思路很清楚没问题,但是答案一直错误的情况,需要停下来尽量想一想样例中有没有漏掉的特殊情况,然后再想一想是不是对整个代码的执行过程有误解,最好把不同的情况都在纸上演练一遍。

标签:right,end,int,workers,worker,start,细节,法师,CUMTOJ
From: https://www.cnblogs.com/satsuki26681534/p/18091422

相关文章

  • 传奇私服中法师冰咆哮和龙卷风技能哪个厉害?
    在传奇中冰咆哮这个技能应该是所有玩过法师的玩家都非常清楚的一个技能了,这个技能由于高魔法攻击和炫酷的魔法攻击特性给我们留下深刻的印象。在新版本的传奇私服中除了原来的冰咆哮技能做了一些提升和改变,还带来了一个全新的技能龙卷风,这个听上去就非常强大的技能作为法师的一......
  • java细节篇之动态绑定机制
    大家好,我是教授.F动态绑定机制,在对象上体现。一个对象有编译类型和运行类型,运行类型看=号的右边,编译类型看=号的左边。例如:publicTest{publicstaticvoidmain(String[]args){Animalanimal=newDog();}}classAniaml{}classDogextends......
  • 【学习】Web测试是在测什么?有哪些容易被忽视的小细节?
    Web测试,这个看似简单的词汇,却关乎着互联网产品的质量和用户体验。那么,Web测试到底在测什么呢?在探讨这个问题之前,让我们先了解一下Web测试的定义:Web测试是一种针对Web应用程序的测试过程,旨在发现并纠正其中的错误和缺陷,以确保产品的稳定性和可靠性。在这个过程中,测试人员需要......
  • 二分查找总结——二分查找细节分析 + 红蓝染色法
    1.写在前面本文为个人学习总结,二分算法参考:B站Up:灵茶山艾府(二分查找红蓝染色法)视频链接:https://www.bilibili.com/video/BV1AP41137w7/Leetcode题目:34.在排序数组中查找元素的第一个和最后一个位置给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你......
  • me5413算法的实现细节
    Introduction这项作业的目的是让你通过几种基本规划算法及其应用来积累经验。在实施和测试这些算法后,你应该能够了解到规划中的现实挑战以及每种算法的优缺点。Task1:GlobalPlanningForbothTask1&2ofyourplanninghomework,youwillbeusingamapoftheVivoCity......
  • 进行SEO网站建设时需要注意哪些细节
    本文章推荐为:98问答社区 https://hcgf898.com/最近一些刚开始从事SEO职业的朋友问我,做一个新网站前期在SEO布局上要注意哪些因素?针对网站的SEO切入点在哪里?于是达妹花费了一点时间整理了一下思路,针对新网站前期的SEO布局注意事项做下分享!网站是人们了解各类信息的重要途径......
  • 数据结构之LinkedList底层代码全方位细节实现!
    题外话我很想发点nb的知识,但是路得一步一步走,饭也得一点一点吃,所以说不积跬步无以至千里,不积小流无以成江海!!!大家一起努力,未来属于我们!!正题理解链表相信大家看到这都应该明白链表,那就简单讲下链表组成今天实现LinkedList底层,LinkedList是一个双向链表,但是咱......
  • 成都电路板研发:细节也容易搞si人,一个触摸屏485通信数据延迟的“治疗”
    本文介绍一个触摸屏在485通信时遇到数据延时的一个解决方法。前段时间做单片机系统、电路板、控制器、仪器、物联网、工控、电子产品、软件开发项目(Q:2531二六3726)时“接诊”了一个“病人”:是一台装置,它的主控板实现了控制3台泵,采集传感器信息,主控板的一个串口用TTL电平与自带的一......
  • 突破编程_C++_C++11新特性(模板的改进与细节)
    1模板右尖括号的改进在C++11之前,模板的解析和实例化过程中,右尖括号>的处理有时会导致一些意外的结果,特别是在嵌套模板或模板模板参数中。这是因为C++编译器通常会试图“查看前方”来确定何时结束模板参数的列表,这有时会导致解析错误。C++11对模板的右尖括号处理进......
  • Ubuntu 配置 redis主从复制细节
    注意1、首先配置  slaveof<主服务器的IP><主服务器redis的端口>2、然后配置  masterauth主库密码3、记得开放端口或者直接关闭防火墙sudosystemctlstopufw.service  关闭防火墙sudosystemctldisableufw.service  禁用防火墙服sudoufwstatus  确认防......