2023夏PAT甲级题解

news/2024/7/5 1:39:20

目录

总结:

A-1

题意:

思路:

AC代码:

A-2 

题意:

AC代码:

A-3

题意:

思路:

A-4 Big Number

题意:

思路:

AC代码


总结:

        第一次打PAT甲级可能也是最后一次打了,可能因为今天蓝桥国赛,就我一个人考,考场上主要还是不太适应英文题面,老是看样例猜题意,第一个题一看是个地图乍以为是个搜索,读了20分钟题看懂题意是个模拟,交了一发13分,想不出来测试点,于是看第二题,看样例以为直接用队列就行了,沉下心看题目,结果要按题意双栈模拟队列,调试了20分钟AC了,第三题常规的建树,求每个节点的度,调试20分钟AC了,这时一看排名33。就接着看第四题,看样例和题意都没看懂,这时还有1个半小时结束,后面又排序骗了5分,最后又回去想第一题的测试点,测不出来。一个半小时坐牢,就这样结束了这次考试。

        赛后又补了下题,找队友一起读题读懂了A4, 还没测,以下代码是都是凭记忆写的,等过两天可以测题了,会再更新。

A-1

题意:

给定一个N*N的地图,地图上有障碍物,规定从最后一行走,即最后一行列为1~n的为起点,可以一直往上走,遇到障碍物后往左走,若往左走能走出边界则也算能走出去,求不能走出地图的起点为多少。

思路:

模拟,枚举每个起点即可

AC代码:

待补~

A-2 

题意:

给你两个栈,模拟一个队列,并且给出每次deque操作的时间。

AC代码:

#include <bits/stdc++.h>

#define all(s) s.begin(), s.end()

using namespace std;

const int N = 1e5 + 7;

string op;
int n, x, k;
stack<int> s1, s2;

int main() {
    cin.tie(nullptr)->ios::sync_with_stdio(false);
    cin >> n;
    while (n -- ) {
        cin >> op;
        if (op == "I") {
            cin >> x;
            s1.push(x);
        } else {
            if (s1.empty() && s2.empty()) {
                cout << "ERROR\n";
                continue;
            }
            if (s2.empty()) {
                while (!s1.empty()) {
                    s2.push(s1.top());
                    s1.pop();
                    k += 2;
                }
            }
            cout << s2.top() << ' ' <<  ++ k << endl;
            k = 0;
            s2.pop();
        }
    }
    return 0;
}

A-3

题意:

给你一颗二叉树的先序遍历和中序遍历,求每个顶点的度。

思路:

递归建树,再进行从根节点dfs计算每个节点的度,注意节点范围在int,因此最好开个map。

#include <bits/stdc++.h>

using namespace std;

const int N = 1e3 + 7;

int n;
int inOrder[N], preOrder[N];
unordered_map<int, int> mp, degree;

struct TreeNode {
    int val;
    TreeNode *left, *right;
    TreeNode(int x): val(x), left(nullptr), right(nullptr) {}
};

TreeNode *build(int inL, int inR, int preL, int preR) {
    if (inL > inR) return nullptr;
    int curRoot = preOrder[preL];
    auto *root = new TreeNode(curRoot);
    int k = mp[curRoot];
    root->left = build(inL, k - 1, preL + 1, preL + k - inL);
    root->right = build(k + 1, inR, preL + k - inL + 1, preR);
    return root;
}

void DFS(TreeNode *root) {
    if (!root) return ;
    if (root->left) {
        degree[root->val] ++;
        DFS(root->left);
    }
    if (root->right) {
        degree[root->val] ++;
        DFS(root->right);
    }
}

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> inOrder[i], mp[inOrder[i]] = i;
    for (int i = 1; i <= n; i++) cin >> preOrder[i];
    TreeNode *root = build(1, n, 1, n);
    DFS(root);
    int n0 = 0, n1 = 0, n2 = 0;
    for (auto [k ,v] : mp) {
        if (degree[v] == 0) n0 ++;
        if (degree[v] == 1) n1 ++;
        if (degree[v] == 2) n2 ++;
    }
    cout << n0 << " * " << n1 << " / " << n2 << " = " << (int)(n0 * 1.0 * n1 / n2);
    return 0;
}

A-4 Big Number

这题当时考场上读了1小时没读懂题目,赛后问队友才明白题意。

题意:

给你n张卡牌,卡牌的一面写着索引(1-n)一面写着一位数的数字,这意味着n的若卡牌的一面为大于等于10的数字,则这个卡牌的索引和数字是确定的,若两面都为小于10的数字,则两面都可以互用,要求你按照索引给出最后拼成的最小的数字。

思路:

索引为10~n的数字是确定的,那么我们只考虑索引为1~9的即可,对于每个索引为1~9的我们找出当前可以放置的数字最小的,然后再把用过的这个边删掉即可。时间复杂度大概O(10 * (n + e))

AC代码

#include <bits/stdc++.h>

#define all(s) s.begin(), s.end()

using namespace std;

const int N = 1e5 + 7;

int n, a, b;
vector<int> g[N];

int main() {
    cin.tie(nullptr)->ios::sync_with_stdio(false);
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a >> b;
        if (a >= 10) swap(a, b); //索引是 y 数字是x
        if (a < 10 && b < 10) {
            g[a].push_back(b), g[b].push_back(a);
        } else if (a < 10 && b >= 10) {
            g[b].push_back(a);
        }
    }
    for (int i = 1; i <= n; i++) {
        if (i >= 10) cout << g[i][0];
        else {
            int minv = *min_element(all(g[i]));
            g[minv].erase(find(all(g[minv]), i));
            cout << minv;
        }
    }
    return 0;
}


http://lihuaxi.xjx100.cn/news/1231650.html

相关文章

AMC12和高考数学哪个更难?知识点有哪些不同?

AMC12和高考数学哪个更难&#xff1f;知识点有哪些不同&#xff1f;今天小编给大家来详细介绍一下&#xff01; 难度对比 从难度上看&#xff0c;高考数学的计算量更大&#xff0c;并且知识点比AMC10/12超前&#xff0c;需要用到极限和微积分的知识。 反观AMC10/12不需要用到…

【MySQL】数据库的查询语言DQL

目录 前言&#xff1a; 一.基本查询 1.1查询多个字段 1.2设置别名 1.3去除字段中重复的值 二.条件查询 2.1条件的种类 2.1.1比较运算符 2.1.2逻辑运算符 三.结尾 前言&#xff1a; 在前面讲完了如何增删改数据表中的记录后&#xff0c;那么如何使用这些数据就成了另一…

有可以在游泳戴的耳机吗?适合游泳佩戴的耳机推荐

1.南卡Runner Pro4S骨传导游泳耳机 作为国内骨传导天花板品牌的南卡其发布的新产品Runner Pro 4S与之前的Pro 3和Pro 4在佩感方面没有太大改变&#xff0c;依旧舒适牢固&#xff0c;不会发生掉落的情况&#xff0c;实测重量31.7g&#xff0c;几乎是无感佩戴&#xff0c;毫无负担…

SpringBoot+Mybatis+Thymeleaf实现的物资管理系统

本系统具体使用的技术是&#xff1a;后端使用SpringBootMybatis&#xff0c;前端使用了Thymeleaf框架&#xff0c;数据库使用的是MySql 8.0。开发工具使用的是IDEA。 本系统前端是使用了前辈的管理系统模板&#xff0c;具体的系统模块功能如下图所示&#xff1a; 一、系统首页…

dubbo流量录制异常(dubbo2.7.3)的问题解决排查

背景 我们自己基于jvm-sandbox-repeater做的流量录制出现了如下的问题, 从这个问题的堆栈信息来看&#xff0c;是在针对dubbo的调用的时候判断这个dubbo的返回是否有异常的时候&#xff0c;报了空指针异常了。 分析 我们看下具体出错的代码地方是怎么样的吧。 Overridepro…

Rust每日一练(Leetday0027) 单词搜索、删除重复项II、搜索旋转排序数组II

目录 79. 单词搜索 Word Search &#x1f31f;&#x1f31f; 80. 删除有序数组中的重复项 II Remove-duplicates-from-sorted-array-II &#x1f31f;&#x1f31f; 81. 搜索旋转排序数组 II Search-in-rotated-sorted-array-II &#x1f31f;&#x1f31f; &#x1f31…

北邮国院物联网Software Engineering软件工程笔记

主要依照课上ppt的面向考试学习。 pdf文件获取&#xff1a;添加文章末尾微信公众号&#xff1a;灰海宽松&#xff0c;后台回复“软件工程”获取文件。 文章目录 Introductionsoftware typesgood software featureswhat is software engineering?4 layersWhy important?Genera…

chatgpt赋能python:Python实践:如何升级pip

Python实践&#xff1a;如何升级pip Python作为一门高效的脚本语言&#xff0c;被广泛应用于数据分析、人工智能、Web开发等领域。而pip则是Python的包管理工具&#xff0c;是开发Python应用的必备工具。但是pip在使用过程中&#xff0c;有时候会出现版本不兼容或者出现漏洞等…