admin 管理员组

文章数量: 1184232

2020冬季 PAT 甲级记录

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

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

签到题,感觉是送分的

#include<bits/stdc++.h>
using namespace std;longlong t, s1 =0, s2 =1, n, ans1, ans2, ans;voidfib(int a,int b){
	ans = s1 + s2;if(ans >= n){
		ans1 = ans;return;}else{
		s1 = s2;
		s2 = ans;
		ans2 = ans;fib(s1, s2);}}intmain(){
	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;return0;}

2、substring(字符串匹配)

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

#include<bits/stdc++.h>
using namespace std;constint o =1e4+5;int c1, c2, f1[o], f2[o], flag, sta;//f1记录所有子串中的字符在字符串中出现的下标//f2记录子串中每个字符出现的第一次在f1中的下标 intmain(){
	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;return0;}/*
atpaaabpabttpcat
pat
*/

3、文件树(模拟)

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

#include<bits/stdc++.h>
using namespace std;constint o =1e5;int pre[o], vis[o], last[o];voidfind(int x){if(pre[x]!=-1){find(pre[x]);printf("%04d", pre[x]);
		cout <<"->";}return;}intmain(){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);}}return0;}

4、化学方程?

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

总结

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

本文标签: 模拟 的题库刷 编程