劳役结合的第三天

菜死我了

我是废物

我是厕所清道夫

昨天晚上不知道为啥就睡不着,中间看了眼床头室友手机上的表,都已经一点半了,但是今天早上还是在起床铃之前就自然醒了,于是就去找机房的大佬,在他还没洗漱穿衣好前帮他值了日。
到机房后又看了看机房的期末考试成绩表,其中被分进好班的最后一名,如果我俩都不算上文综的话,我只比他低了8分,虽然一定是没发挥好,但是确实是好班水平,所以我决定奋发图强,下学期如果只看理综和语数外就能微调的话,一定要搏一搏。啥表述啊
于是我愉快地在机房偷学了一上午的文化课,主要是因为我太菜了,物理课都没听,作业写得异常艰难。
所以又开始写堆的题,但我可是立志要手写一切数据结构的男人,于是就开始学手写堆。
由于实在是太难了,我屈服于大根堆小根堆。
最终终于磕出来了第一道二叉堆的板子题超市Supermarket,而且中间因为写堆的时候

priority_queue< int,vector< int >,less< int > > p;//大根堆 
priority_queue< int,vector< int >,greater< int > >q;//小根堆 

没写空格,看了好久书才注意到是有个空格的。
这也更使我下定了学手写堆的决心在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
priority_queue< int,vector< int >,less< int > > p;//大根堆 
priority_queue< int,vector< int >,greater< int > >q;//小根堆 
struct supermaket{
    
    
	int a,b;
}sup[10086];
int n,ans;

bool mycmp(supermaket x,supermaket y)
{
    
    
	return x.b<y.b;
}

int main()
{
    
    
	while(cin>>n)
	{
    
    
		ans=0;
		for(int i=1;i<=n;i++)
			scanf("%d%d",&sup[i].a,&sup[i].b);
		sort(sup+1,sup+n+1,mycmp);
		q.push(sup[1].a);
		for(int i=2;i<=n;i++)
		{
    
    
			if(q.size()<sup[i].b) q.push(sup[i].a);
			else if(sup[i].a>q.top())
			{
    
    
				q.pop();
				q.push(sup[i].a);
			}
		}
		while(!q.empty())
		{
    
    
			ans+=q.top();
			q.pop();
		}
		cout<<ans<<endl;
	}
	return 0;
}

堆这东西就离谱!!!

于是气得我又写了道 最大子序和,但我觉得应该叫最大子串和,印象里子串应该是连着的,子序不需要。

#include <bits/stdc++.h>
using namespace std;
const int N=3e5+10;
long long t[N],a[N],sum,n,m,hh,ans=-9999999;
int main()
{
    
    
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=n;i++)
	{
    
    
		scanf("%lld",&a[i]);
		a[i]=a[i-1]+a[i];
	}
	for(int i=1;i<=n;i++)
	{
    
    
		if(i-t[hh]>m) hh++;
		ans=max(ans,a[i]-a[t[hh]]);
		while(hh<=sum&&a[t[sum]]>=a[i]) sum--;
		t[++sum]=i;
	}
	cout<<ans;
	return 0;
}

先把每次输入的都和之前的加,得到第1到第i个数的和,然后就有点典型的前缀和的味道了,然后再维护个单调队列就ok了。
写完之后心情大好,于是开始写物理,但是由于还没听过课一直在机房,很长时间才艰难地做了不到2页。于是蹭了hyp大佬的物理网课,真香!!!
在这里插入图片描述

(侵删)

于是大彻大悟,上了1h左右就又开始以抄写《蜀道难》完成练字作业。
吃饭那会儿吐槽为什么小年不能回家祭灶,引起了高三学姐的共鸣。
回班领老师新发的卷纸就离谱,我连位置都没有,理所当然没一张,关键我去的时候在看视频,而星星的班长还不让我去讲台上翻卷纸,所以就再后头站了15min,真乾啊!到最后拿的卷纸还不全。
然后有做了波义务劳动——打扫机房。
不得不说,我桌面是真的乱。
接着就又开始学手写堆,但是据说手写堆的人其实不多,手写的话时间复杂度之类的也没太大差别。

然后就不得开始写荷马史诗

这如果是把作业变短而不是把《荷马史诗》变短,我直接就能热血起来。
不过老师突然又来发糖,由于没买到芝麻糖,老师给每人一大把俄罗斯紫皮糖,高强度自闭的我决定看题解视频,没看完的时候大佬让我来把AC Saber,刷到了找硬币这么一道水题。一看数据范围这么小,果断立bool数组,但是由于没考虑一个硬币不能用两次,所以第一遍错了。

#include<bits/stdc++.h>
using namespace std;
int n,m,a;
bool flag[100010];
int main()
{
    
    
    cin>>n>>m;
    for(int i=1;i<=n ;i++)
    {
    
    
        scanf("%d",&a);
        flag[a]=1;
    }
    for(int i=1;i<=m;i++)
    {
    
    
        if((flag[i])&&(flag[m-i])&&((m-i)!=i))
        {
    
    
            cout<<i<<' '<<m-i;
            return 0;
        }
    }
    cout<<"No Solution";
    return 0;
}

码字时间: 8 分钟 11.913 秒,侥幸在大佬之前AC掉,心情大好。
最后吐槽一句老班新开的班群目前就我一个人,竟然还不给我管理。
嘤嘤嘤在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ydsrwex/article/details/113623589