【PAT甲级】2020冬季 PAT 甲级

2020冬季 PAT 甲级记录

第一次参加PAT,本来九月份报名的时候是打算到十二月份的时候把乙级的题库刷完,然后甲级的题库刷一半,结果因为各种各样的事情(主要是懒又没坚持0.0)这次直到考前乙级才刷完三分之二,甲级一题都没刷就来考试了,而且考前才得知原来我报名的考点是线上考点要自己准备环境,一看考试须知,周围2.5米内不得有人,考试中途不能上厕所,妈蛋我是六人寝啊,2.5米不得有人我要把我舍友都扔出去吗- -,我最喜欢做题喝水了,之前打一场比赛至少要去个三次厕所,感觉自己被针对了0.0然后焦头烂额准备环境(把自己的电脑和座位拿几件外套围起来,通知舍友不要发出声音。。)再加上最近沉迷刀剑真是想不白给都难,不废话了,上题目

1、斐波那契数列(模拟)

签到题,感觉是送分的

#include<bits/stdc++.h>
using namespace std;
long long t, s1 = 0, s2 = 1, n, ans1, ans2, ans;
void fib(int a, int b){
	ans = s1 + s2;
	if(ans >= n){
		ans1 = ans;
		return;
	}
	else{
		s1 = s2;
		s2 = ans;
		ans2 = ans;
		fib(s1, s2);
	}
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin >> n;
	fib(s1, s2);
	if(abs(n - ans1) < abs(n - ans2)) cout << ans1;
	else cout << ans2;
	return 0;
}

2、substring(字符串匹配)

这题以前训练的时候做过类似的,不过当时就没好好做,然后也一知半解,那个时候一起练习的大神同学说什么滑动窗口什么的,我现在也不太会就是了,当时考试的时候开了三个记录的数组,然后之间的逻辑关系就贼绕,特别复杂,其实暴力就能做出来了,当时环境也不太好发挥很差,改了很久没改好,这代码是第二天改的,不知道能不能过

#include<bits/stdc++.h>
using namespace std;
const int o = 1e4 + 5;
int c1, c2, f1[o], f2[o], flag, sta;
//f1记录所有子串中的字符在字符串中出现的下标
//f2记录子串中每个字符出现的第一次在f1中的下标 
int main(){
	string s1, s2;
	cin >> s1 >> s2;
	for(int i = 0; i < s1.size(); i++){
		if(s1[i] == s2[0]){
			sta = i;//第一个出现的位置,为后面n*m稍微优化一下 
			break;
		}
	}
	for(int i = 0; i < s2.size(); i++){
		flag = 0;
		for(int j = sta;j < s1.size(); j++){
			if(s1[j] == s2[i]){
				if(flag == 0){
					flag = 1;
					f2[c2++] = c1;
				}
				f1[c1++] = j;
			}
		}
	}
	int cc1 = 1, minn = 1e8, flag1, ans, p, flag2;
	if(c2 > 1){
		for(int i = 0; i < f2[1]; i++){
			flag1 = 0, cc1 = 1;
			for(int j = f2[cc1]; j < o; j++){
				if(flag2 == 1){
					flag2 = 0;
					j = f2[cc1];
				}
				if(f1[i] < f1[j]){//如果这个字符出现的下标在前一个字符之后,那就成功,每次只要记录后一个=种字符的第一个就行了 
					flag2 = 1;
					cc1++;
					if(cc1 == c2){//完成子串,那么记录长度和位置,ans为长度,p为在字符串中的下标 
						ans = f1[j] - f1[i] + 1;
						if(ans < minn){
							minn = ans;
							p = f1[i];
						}
						flag1 = 1;
						break;
					}
				}
			}
			if(flag1 == 1) continue;
		}
		string pp;
		pp = s1.substr(p, minn);
		cout << pp;
	}
	else cout << s2;
	return 0;
}
/*
atpaaabpabttpcat
pat
*/

3、文件树(模拟)

这题看着挺复杂的,开了vector存路径,结果写完才发现根本没有vector的出场,真是离谱,然后细节修改修改提交,格式错误,懵逼,给的样例error在最后一行,所以我的error那一行没加换行, 结果我debug了半个小时才发现这个问题,服了,又特别想上厕所(我没喝水啊!)

#include<bits/stdc++.h>
using namespace std;
const int o = 1e5;
int pre[o], vis[o], last[o];
void find(int x) {
	if(pre[x] != -1) {
		find(pre[x]);
		printf("%04d", pre[x]);
		cout << "->";
	}
	return;
}
int main() {
	int n, a, c, m, x;
	string s, s1;
	vis[0] = 1;
	fill(pre, pre + 100000, -1);
	cin >> n;
	getchar();
	getline(cin, s1);
	for(int i = 1; i < n; i++) {
		c = 0;
		getline(cin, s);
		a = stoi(s);
		while(s[c] == ' ') c++;
		last[c] = a;
		pre[a] = last[c - 1];
		vis[a] = 1;
	}
	cin >> m;
	for(int i = 0; i < m; i++) {
		cin >> x;
		if(vis[x] == 1) {
			find(x);
			printf("%04d\n", x);
		} else {
			printf("Error: %04d is not found.\n", x);
		}
	}
	return 0;
}

4、化学方程?

题目太长了,看不太懂,然后又憋得慌,我直接交卷去撤硕了,这题还是等我多刷点题库才看吧- -

总结

总的来说自己太菜,也没刷题库,虽然这次目的是试水(我就是奔着三题去的- -)但感觉这次应该难度不算大吧(不过我之前也没考过就是了),除了第四题应该很难前三题都挺简单的,只不过体验还是有点差,发挥也一般,寒假好好把题库给做了,希望疫情快点结束,线上考简直折磨,希望快快变回线下考,明年嗯冲一波PAT!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Why_so?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值