UVA2322和2.2的一些思考-木棍时间问题

本文探讨了算法竞赛中一种优化代码的方法,通过改进数据结构和减少不必要的操作来提高效率,对比了使用优先队列和排序方法的性能差异。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

题目链接:https://vjudge.net/contest/210716#problem/H
==========一些思考===========
======为什么我的会超时呢=====
(其实我只要不看手机,真的效率就就很可怕了!)
(好的咯...别辜负她们 的期望呀!)
(别看手机!直到40分钟响了未知,然后去洗了衣服或者收拾一下再看手机,你不会失去什么的!!!)


我的思想是,是按照这个比较的没错,然后把数组复制一下,每次都挑选出来符合条件的
但是在面对数据量非常大的时候,就很吃亏了,每次要比较,要转移一次,再转移一次


看网上这个人的代码的思想呢:


比较奇特,对于每一个n
for(i=1;i<n;i++)
for(j=1;j<rnt;j++)【画重点,rnt】
if(长和宽*2)  //不满足条件的话
flag=0;


一直都是正序列的,
查找是2n吧这样。。还是不到n方?  n方吧两重


if(flag==0)
rnt=tmp[i];




也就是一个数组存很多个东西
以rnt的坐标为基准的几组,在里面卡的好好儿的
以rnt和j为坐标的几组,如果新的i这几组的等价关系都不满足的话,把它作为新的,再去存一次。
rnt显然必须要是最大的,如果不是的话打死(划掉)存上。


此外,只是用了sort一次,感觉优先队列每次插入的话更麻烦,每次都要排序的话很容易超时的吧。
用了sort是确保最大优秀的吧。




不然的话,岂不是只能看随机分配的了。

=====附代码========

ac代码

#include <stdio.h>  
#include <string.h>  
#include <algorithm>  
using namespace std;
const int N = 5005;

struct stick {
	int len;
	int wei;
}tmp[N], rec[N];

bool cmp(const stick& a, const stick& b) {
	if (a.len != b.len)
		return a.len < b.len;
	else
		return a.wei < b.wei;
}

int main() {
	int cas, n, cnt, begin;
	scanf_s("%d", &cas);
	while (cas--) {
		cnt = 0;
		memset(tmp, 0, sizeof(tmp));
		memset(rec, 0, sizeof(rec));

		scanf_s("%d", &n);
		for (int i = 0; i < n; i++)
			scanf_s("%d %d", &tmp[i].len, &tmp[i].wei);

		sort(tmp, tmp + n, cmp);//没用优先队列,而是用的这个。。会简单不少吗

		for (int i = 0; i < n; i++) {
			int flag = 1;
			for (int j = 0; j < cnt; j++) {
				if (tmp[i].len >= rec[j].len && tmp[i].wei >= rec[j].wei) {
     					rec[j] = tmp[i];
					flag = 0;
					break;
				}
			}

			if (flag)   rec[cnt++] = tmp[i];
		}
		printf("%d\n", cnt);
	}
	return 0;
}

以及我自己超时了的。。
#include<queue>
#include<iostream>

#include<algorithm>
#include<string>

using namespace std;
//PLease!!!
//(起码是)在你的事情做完之前,不要理他们。
//不要!!!!!!
// 2.4基本都关门了也是xxx回来了考虑 和小可爱吃饭吧
// 啊啊啊啊啊啊啊111!!!!

// 哇哈哈哈先让我笑死吧,果然坚持不下去的时候逼迫自己一把会发现环境真的是太重要了对我而言哇哈哈哈
// 哇哈哈哈哈.,, 不要理他们(对)
//
//(if ever)回去写题解,电脑随身携带,或者回去重新打一遍哇哈哈哈
//
struct stick{
	int len;
	int width;

	//stick(int len = 0, int width = 0) :
		//len(len),width(width){}

		bool operator<( const stick&b)const
	{
		return this->len<b.len;//默认是升序的,大顶堆    【不对啊,,大顶,应该后边的大,是我写错了。。
		//那么大的时候true,记住就行了
		if (len == b.len)
			return width <b.width;

	}
		
} sticks[200];



int main()
{
	//哇哈哈哈  这里改成stick之后简直完美 阿拉拉拉
	priority_queue<stick>q;
	priority_queue<stick>q2;
	int m;
	cin >> m;
	while (m--){
		int n; cin >> n;
		for (int i = 0; i < n; i++)
		{
			cin >> sticks[i].len >> sticks[i].width;
			//输入了这两个
			//怎么一起push吗  嗯
			q.push(sticks[i]);
		}
		//很好,已经完成了数据的初始化

		//接下来的数据是按照len长度排序的
		int result = 0;
		while (!q.empty())
		{
			//stick	temp1 = q.top();
			//q.pop();



			//stick temp2 = q.top();
			//now that we have known that q/
			stick	temp1 = q.top();
			q.pop();
			while (!q.empty()){
				//  先把第一个取出来,再跟第一个比较,直到找到第一个的为止。

				if (q.top().width > temp1.width)//不乖的宝宝都给我踢出去
				{
					q2.push(q.top());
					q.pop();
				}
				else// 乖宝宝,直接踢出去
					q.pop();
			}
			//然后,从q2那里转移过来,还是优先队列。
			while (!q2.empty())
			{
				q.push(q2.top());
				q2.pop();
			}
			result++;

			// “我已经把你们按照len排起来了,width不这样我也没办法
			//result++;
			//q.push(temp2);
			//else  
			//   else... else......  else

			//********************that's why i love it do yoyu forget????
			//【pop 和push的敏感啊啊啊啊啊啊】。
			//每次都pop出来一个吗》?不知

			//	q.push(temp2);

		}
		cout << result << endl;
	}
	return 0;
}

UVA2322 

难得啊。。。自己独立思考交上去(没错,但是超时了的一题)
那么要学习的地方在哪里呢
小注意(打的时候发现的)




error C2678: 二进制“<”: 没有找到接受“const MyEvent”类型的左操作数的运算符(或没有可接受的转换)
【这个只是少了一个const而已。。。。】




原来是少const限定符把函数设置为const
bool operator<( const stick&b)const
{
return this->len<b.len;//默认是升序的,大顶堆    【不对啊,,大顶,应该后边的大,是我写错了。。
//那么大的时候true,记住就行了
if (len == b.len)
return width <b.width;


}




【只能是小于号,只能是小于号。。(重载的只能是小于号?不知)】


反正,大顶,然后最上面的最大,然后  a<b 嘛。










【专注啊啊啊啊,别去看手机啊啊啊啊】
【看似你脱离了一些东西,其实这就是你在学习/看课本/看书的时候经常有人打扰你的手机啊!】
【别看手机  别看手机 别看手机】
【要考虑到数据量特别大的时候,一点一点赋值过去肯定是会超时的】


【肯定会超时的】




【cmp要const】






=======题外话=========
0202回不来家度日如年的日子还有七天。
其实今天又懂了一点道理..... 这几天徘徊在放弃的边缘,可是车票问题和距离以及没回来的他,很斩钉截铁地把我的后路截断了。每天都能够长大一点点吧,和在家里躺在床上每天一动不动相比。
那就是,不要失去自己的生活。比如洗衣服和收拾桌子和整理,
我才发现其实我浪费在手机上的时间太多了。之前没注意到,其实这和我每一次写作业的时候都忍不住拿起手机, 是一个道理啊。
【哪怕是高效不看手机、专注地学四个小时,回去开心的玩儿也好啊】


但是我的情况一般是【学不下去,看看手机】
【低效地呆了六个小时,没有完成工作,回去继续】
进而挤占其他一些事情,最后自己(是真的!)狼狈不堪
唉。。。自己还是个小妹子啊!!!!怎么可以因为不见人就这么邋遢呢


但其实我的正确打开方式应该是,真的学不下去的时候就去洗衣服和收拾房间吧。
这样又避免看手机,又能防沉迷,又能换脑子啊。
正确的打开方式应该是,明明不会有那么多人找你,哪怕是一个小时看一下下手机也就打消了兴趣了。
很可怕的啊,是不是,少女,如果你也不想看到这么糟糕一天天度日的自己。






反正总是要分出时间做这些事情的
【看比值啊!】
【如果你每天能花一个小时做这些事情然后让自己的心情变得很好的话】


心情很好的学十个小时,
比心情不好的学十一个小时好很多其实


唉。。道理啊
这些东西啊
以后学着学着慢慢就懂了吧


你这么邋遢。。。宁可发呆 都不肯
都不肯收拾寝室洗衣服!!!!!!!!!!!!!

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

内容概要:本文聚焦于不计电池储能寿命损耗的微电网经济调度问题,提出了一种融合电价型、激励型及可中断负荷型三类需求侧响应机制的优化调度模型。研究基于Matlab平台构建了包含光伏、风机、储能系统等多种分布式能源的微电网运行成本最小化模型,详细阐述了目标函数与约束条件的数学建模过程,并通过仿真验证了所提策略在降低系统运行成本、实现削峰填谷提升能源利用效率方面的有效性。该模型强调需求侧资源的灵活调控能力,为微电网的经济高效运行提供了理论支持技术路径。; 适合人群:电力系统、能源互联网及相关专业的高校研究生、科研人员,以及从事微电网优化调度、综合能源系统规划与运行的工程技术人员。; 使用场景及目标:①用于教学科研中深入理解微电网经济调度的核心原理、建模方法与求解流程;②为实际微电网项目中整合多类型需求侧响应资源、制定优化运行策略提供可复现的仿真工具与技术参考;③作为进一步研究更复杂场景(如计入储能寿命损耗、碳排放约束、不确定性因素等)的优化模型的基础框架。; 阅读建议:读者应具备电力系统基础理论知识Matlab编程能力,建议结合文中模型逐步复现代码,通过调整负荷曲线、能源价格、响应参数等量进行敏感性分析,以深化对调度机制的理解。需特别注意,本模型未考虑电池寿命损耗这一关键因素,在实际工程应用中应结合电池老化模型进行补充完善,以获得更贴近现实的调度方案。
内容概要:本文提出了一种考虑阶梯式碳交易与供需灵活双响应的综合能源系统优化调度模型,并通过Matlab代码实现。该模型深度融合了阶梯式碳交易机制与电力系统中需求侧及供给侧的灵活响应能力,构建了一个涵盖电、热、气等多种能源形式耦合的综合能源系统框架。通过引入阶梯碳价机制,有效激励系统低碳运行,同时结合需求响应与供给调整的协同优化策略,显著提升了系统运行的经济性与环保性。研究采用先进的数学优化方法对模型进行求解,实现了对系统内各能源单元出力、储能设备调度、负荷转移等关键量的全局最优配置,为实现能源高效利用与碳排放最小化的双重目标提供了科学支撑。; 适合人群:具备电力系统、能源系统建模或优化调度等相关背景的科研人员与工程技术人员,特别适合从事综合能源系统规划、低碳调度策略、碳交易机制设计等方向研究的研究生及高校教师。; 使用场景及目标:①深入研究阶梯式碳交易机制在综合能源系统中的建模方法与应用效果;②实现供需双侧灵活互动下的系统经济性与低碳化协同优化调度;③为区域能源系统的低碳转型提供量化分析工具与决策支持依据;④作为Matlab平台下能源系统优化建模的教学案例或科研复现参考。; 阅读建议:建议读者结合提供的Matlab代码逐行解析模型构建过程,重点掌握目标函数与约束条件的数学建模逻辑及其程序实现方式。在学习过程中应积极尝试调整碳价阶梯参数、改负荷响应场景以观察系统优化结果的化,从而深化对模型机理的理解。同时,可将本模型与单一碳价或其他需求响应模型进行对比分析,进一步拓展研究视野与创新思路。
已经博主授权,源码转载自 https://pan.quark.cn/s/43c3d5a5f28a 在Web开发领域中,网站系统升级维护提示页面的构建与部署占据着至关重要的地位,特别是在系统进行更新操作或进行故障修复期间,为了确保用户操作的流畅性数据的完整性,通常会运用到此类提示界面。一个名为"网站系统升级维护提示页面.rar"的归档文件内,收录了完成这一功能所必需的核心构成部分。其中,`index.html`文件作为网页的核心载体,负责构建页面的基本框架呈现内容。针对当前的应用情境,`index.html`文件极有可能运用一种简约而雅致的布局设计,用以呈现"系统升级维护中"的状态信息。编程人员能够在这个文档中定位到展示企业标识建设性升级提示的代码单元,并且可以依据实际需求进行个性化设置。 `css`目录中存放的是CSS(层叠样式表)文档,这些文档负责设定页面的视觉表现,涵盖色彩搭配、字体选用、页面布局以及响应式设计等多个方面。在系统升级维护的提示页面上,CSS样式或许已经预设了与整体风格相契合的色彩搭配元素排布,以此保障页面的视觉吸引力专业性。编程人员可以通过调整这些样式规范来优化页面的整体观感,使其与企业的品牌形象保持一致。 `images`目录则用于存储页面装饰或信息传递所需的图形素材。这些图形可能包含加载指示器、公司标识以及其他与系统升级维护相关的视觉符号。图形素材的挑选设计对于信息的有效传递以及用户体验的提升具有决定性作用。编程人员可以根据实际需求进行图形素材的替换或增补,确保其与整体页面设计风格相吻合。 `js`目录内包含了JavaScript程序代码,这些代码负责处理页面的交互机制动态表现。例如,JavaScript代码可能被用于实现计时功能,显...
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值