2021年3月份春季PAT甲级考试总结~~~

博主分享了从零基础准备PAT算法竞赛的经历,通过自学算法笔记,经历断断续续的学习过程,在考试中面对难题保持冷静,成功解答部分题目,最终获得满意成绩。主要涉及的算法包括时间排序、堆排序和Floyd算法。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
因为最近在准备考研,所以一直没机会来总结一下这次的PAT考试,今天抽个空来说说,算是为这几个月来的准备画上一个句号。
我大概算是从去年的十月份开始准备的,初衷是为了在大三的最后一段时间多参加一些比赛,避免考研进了复试后简历上奖项是空白的尴尬,而且以后机试迟早是要准备的~
当时对于算法和数据结构的代码这些算是零基础,因此买了一本算法笔记开始一步步地学,因为大三上学期的课还是挺多的,所以断断续续到了寒假也才学完了一半,最后一直到寒假结束才勉强刷完了上面的所有题目。
等到考试前才发现自己之前学的又忘了好多,然后花了一天复习一遍那些模板,前几年的真题都还没来得及刷就这样慌慌张张进了考场。
拿到题目先看了第一题心态就崩了,完全没思路,第一题不应该是签到题吗???看了五分钟果断翻到第二题,嗯这应该是个时间排序题,算法笔记上练过好多,但是代码好多,先看看下一题。第三题,堆排序!!!还好考前背了一下堆排序的模板,是啥来着,哎一紧张又记不得多少了。先看看最后一题。读了一遍题目,图论的题目,但是好复杂的样子,好像是要用好多次dijkstral最短路径,压轴题先放一放吧。然后我决定先攻破第二题,此时内心差不多已经平静了下来,认真分析了一下第二题,哎这题好像可以用贪心,不管了先试一下,花了20分钟一气呵成写完提交,AC了,NICE!!!25分到手,不至于0分了。此时时间过了差不多40分钟,我手贱点了一下排名,我擦,好多大佬都75分了,心态瞬间又崩了。看了一下这些大佬都是第三题还没有得分,难道这题才是最难的压轴题?然后我看了一下通过率,第四题的通过率居然比其他几题都要高,果断转战第四题。在纸上推演了一遍样例之后,突然发现这题好像floyd算法好像更简单一点,考前刚好有背过这个模板,虽然算法笔记上没有练过floyd的题目,但我还是决定大胆尝试一下,一次AC,太棒了!!!又到手了30分,心情有点好了。此时差不多过了一个半小时,看了一眼排名,我擦,好多大佬已经满分了。接着决定先做第一题,经过40分钟的尝试还是失败了,最后printf大法混了一分。最后开始分析第三题,读了一遍题目好像挺简单的啊,就是对堆排序的一些性质进行判断,然后就开始了艰难地回忆堆排序的模板代码,好在昨天刚看了一遍有点印象,最后成功写了出来。但是这时候题目对输入的判断又难住了我,只好用最笨的方法来慢慢分割,然后发现考点的devC++居然用不了C++11,好坑啊,只好放到考试端去测试,因为不能debug又浪费了好多时间,最后好在是在结束前10分钟拿下了24分,总分80,对我来说非常满意了,算是超常发挥了。

下面贴一下题目和代码
第一题
在这里插入图片描述
第一题就算了,只拿了1分,还是printf混到的

第二题
在这里插入图片描述

#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN = 3000;

struct Time{
   
	int Shh, Smm, Sss;
	int Ehh, Emm, Ess;
}time[MAXN];

int n;

bool cmp(Time t1, Time t2){
   
	if(t1.Ehh != t2.Ehh) return t1.Ehh < t2.Ehh;
	if(t1.Emm != t2.Emm) return t1.Emm < t2.Emm;
	if(t1.Ess != t2.Ess) return t1.Ess < t2.Ess;
}

bool g(Time t1, Time t2){
   
	if(t1.Shh > t2.Ehh) return true;
	else if(t1.Shh < t2.Ehh) return false;
	else{
   
		if(t1.Smm > t2.Emm) return true;
		else if(t1.Smm < t2.Emm) return false;
		else{
   
			if(t1.Sss > t2.Ess) return true;
			else if(t1.Sss < t2.Ess) return false;
			else return true;
		}
	}
	
}

int main(){
   
	scanf("%d", &n);
	for(int i=0; i<n; i++){
   
		scanf("%d:%d:%d %d:%d:%d", &time[i].Shh, &time[i].Smm, &time[i].Sss, &time[i].Ehh, &time[i].Emm, &time[i].Ess);
	}
	sort(time, time+n, cmp);
	
	int ans = 1;
	Time temp = time[0];
	for(int i=1; i<n; i++){
   
		if(g(time[i],temp)){
   
			ans++;
			temp = time[i];
		}
	}
	printf("%d", ans);
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值