2023 PAT exam (Advanced level) in winter Dec.12nd

2024-01-08 01:52

本文主要是介绍2023 PAT exam (Advanced level) in winter Dec.12nd,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  1. A-1 Fill in the Numbers
  2. A-2 PeekMax in Stack
  3. A-3 A+B with Binary Search Trees
  4. A-4 Transportation Hub

A-1 Fill in the Numbers

diagonal this word is the most import key in this question. As many people don’t know the meaning of that including me, there’re lots of wrong guessed ideas appearing. However, the question is so easy that I don’t want to say any other words about it.

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1123;int n, m;
int a[N][N];vector<int > res;int dx[] = {0, 0, -1, 1};
int dy[] = {1, -1, 0, 0};inline bool check()
{int sum = 0;for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {bool flag = false;for (int k = 0; k < 4; k++) {int ii = i + dx[k];int jj = j + dy[k];if (ii < 1 || ii > n || jj < 1 || jj > n) continue;if (a[ii][jj] - 1 == a[i][j]) flag = true;if (a[ii][jj] == 1 && a[i][j] == n * n) flag = true;}if (flag) sum++;}}//    cout << sum << '\n';return sum == n * n;
}int maxd[N];int main()
{cin >> n >> m;int maxn = 0;for (int cas = 1; cas <= m; cas++) {for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) cin >> a[i][j];}int sum1 = 0, sum2 = 0;for (int i = 1; i <= n; i++) {sum1 += a[i][i];sum2 += a[i][n - i + 1];}maxd[cas] = max(sum1, sum2);if (check()) {res.push_back(cas);maxn = max(maxn, maxd[cas]);}}//    cout << maxn << '\n';//    cout << res.size() << '\n';vector<int > newres;for (int i = 0; i < res.size(); i++) {if (maxd[res[i]] == maxn) newres.push_back(res[i]);}cout << newres.size() << '\n';for (int i = 0; i < newres.size(); i++)printf("%d%c", newres[i], i == newres.size() - 1 ? '\n' : ' ');return 0;
}

A-2 PeekMax in Stack

Easy operations in stack, but the first idea I thought in the exam is through the multiset (I don’t know if other people also have thought so.). However, if "scanf"s are not used, “Time Limit Exceeded” you will get.

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1123;multiset<int > se;
stack<int > sk;int main()
{int n; cin >> n;while (n--) {string s; cin >> s;if (s == "Pop") {if (sk.empty()) puts("ERROR");else {printf("%d\n", sk.top());
//                cout << sk.top() << '\n';se.erase(se.find(sk.top()));sk.pop();}} else if (s == "Push") {int x; scanf("%d", &x);sk.push(x);se.insert(x);}else {if (sk.empty()) puts("ERROR");else printf("%d\n", *(--se.end()));
//            else cout << *(--se.end()) << '\n';}}return 0;
}

A-3 A+B with Binary Search Trees

An easy problem, but there are many trees created I really do think!

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 212345;set<int > t1;
map<int, bool > t2;int n1, n2;
int a1[N], a2[N];
vector<int > tree1[N], tree2[N];
vector<int > r1, r2;inline bool cmp1(int &a, int &b)
{return a1[a] < a1[b];
}inline bool cmp2(int &a, int &b)
{return a2[a] < a2[b];
}inline void preorder1(int root)
{r1.push_back(a1[root]);sort(tree1[root].begin(), tree1[root].end(), cmp1);for (int i = 0; i < tree1[root].size(); i++) preorder1(tree1[root][i]);
}inline void preorder2(int root)
{r2.push_back(a2[root]);sort(tree2[root].begin(), tree2[root].end(), cmp2);for (int i = 0; i < tree2[root].size(); i++) preorder2(tree2[root][i]);
}int main()
{scanf("%d", &n1);int rt1 = -1, rt2 = -1;for (int i = 0; i < n1; i++) {int k, p; scanf("%d%d", &k, &p);t1.insert(k);a1[i] = k;if (p == -1) {rt1 = i;} else {tree1[p].push_back(i);}}scanf("%d", &n2);for (int i = 0; i < n2; i++) {int k, p; scanf("%d%d", &k, &p);t2[k] = 1;a2[i] = k;if (p == -1) {rt2 = i;} else {tree2[p].push_back(i);}}int N; scanf("%d", &N);bool flag = false;vector<int > res;for (auto it : t1) {if (t2[N - it]) res.push_back(it), flag = true;}if (flag) puts("true");else puts("false");for (int i = 0; i < res.size(); i++)printf("%d = %d + %d\n", N, res[i], N - res[i]);preorder1(rt1);preorder2(rt2);for (int i = 0; i < r1.size(); i++)printf("%d%c", r1[i], i == r1.size() - 1 ? '\n' : ' ');for (int i = 0; i < r2.size(); i++)printf("%d%c", r2[i], i == r2.size() - 1 ? '\n' : ' ');return 0;
}

A-4 Transportation Hub

An easy problem too, but time limited will be considered. In this problem, I used Dijkstra algorithm which I used many times. However, guessing the meaning of the problem will also be a giant idea.

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 512;struct Edge
{int v, w;
};
vector<Edge > e[N];int n, m, k;
int sum[N][N];struct Node
{int w, v;bool operator < (const Node &other) const {return w > other.w;}
};priority_queue<Node > que;
bool vis[N];
int dist[N][N];inline void dijkstra(int s)
{memset(vis, 0, sizeof vis);que.push({0, s});sum[s][s] = 1;dist[s][s] = 0;while (!que.empty()) {int u = que.top().v; que.pop();if (vis[u]) continue;vis[u] = true;for (int i = 0; i < e[u].size(); i++) {int v = e[u][i].v, w = e[u][i].w;if (dist[s][v] > dist[s][u] + w) {dist[s][v] = dist[s][u] + w;que.push({dist[s][v], v});sum[s][v] = sum[s][u];} else if (dist[s][v] == dist[s][u] + w) {sum[s][v] += sum[s][u];}}}
}int main()
{scanf("%d%d%d", &n, &m, &k);while (m--) {int u, v, w; scanf("%d%d%d", &u, &v, &w);e[u].push_back({v, w}); e[v].push_back({u, w});}memset(dist, 0x3f, sizeof dist);for (int i = 0; i < n; i++) {dijkstra(i);}int T; scanf("%d", &T);while (T--) {int s, d; scanf("%d%d", &s, &d);vector<int > res;for (int i = 0; i < n; i++) {if (i == s || i == d) continue;if (dist[s][i] + dist[i][d] != dist[s][d]) continue;int suml = sum[s][i];int sumr = sum[i][d];if ((ll)suml * sumr >= k) {res.push_back(i);}}if (!res.size()) puts("None");else {for (int i = 0; i < res.size(); i++)printf("%d%c", res[i], i == res.size() - 1 ? '\n' : ' ');}}return 0;
}

这篇关于2023 PAT exam (Advanced level) in winter Dec.12nd的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/581959

相关文章

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

MiniCPM-V: A GPT-4V Level MLLM on Your Phone

MiniCPM-V: A GPT-4V Level MLLM on Your Phone 研究背景和动机 现有的MLLM通常需要大量的参数和计算资源,限制了其在实际应用中的范围。大部分MLLM需要部署在高性能云服务器上,这种高成本和高能耗的特点,阻碍了其在移动设备、离线和隐私保护场景中的应用。 文章主要贡献: 提出了MiniCPM-V系列模型,能在移动端设备上部署的MLLM。 性能优越:

2023 CCPC(秦皇岛)现场(第二届环球杯.第 2 阶段:秦皇岛)部分题解

所有题目链接:Dashboard - The 2023 CCPC (Qinhuangdao) Onsite (The 2nd Universal Cup. Stage 9: Qinhuangdao) - Codeforces 中文题面: contest-37054-zh.pdf (codeforces.com) G. Path 链接: Problem - G - Codeforces

HNU-2023电路与电子学-实验1

写在前面: 这是电路与电子学课程的第一次实验,按照指导书的需求在Multisim软件搭建一个电路传感器模型,难度较小,细心完成就没有问题。 小tips:22级实验是采用上传到测试平台来进行功能检测,如果不通过则会打回修改后再重新提交,(我们那时候的评测系统特别特别慢,一次只能测一个同学,剩下同学就排队等着,久的时候甚至超过10个小时),这里列举一个常见的错误:热噪声有+号这端需要连接有源滤波器

PAT甲级-1044 Shopping in Mars

题目   题目大意 一串项链上有n个钻石,输入给出每个钻石的价格。用m元买一个连续的项链子串(子串长度可为1),如果不能恰好花掉m元,就要找到最小的大于m的子串,如果有重复就输出多个,按递增顺序输出子串的前端和后端索引。 原来的思路 取连续的子串使和恰等于m,没有恰等于就找最小的大于。可以将子串依次累加,使得每个位置都是起始位置到该位置的序列和,整个数组显递增顺序,就可以用右边减左边

PAT (Advanced Level) Practice——1011,1012

1011:  链接: 1011 World Cup Betting - PAT (Advanced Level) Practice (pintia.cn) 题意及解题思路: 简单来说就是给你3行数字,每一行都是按照W,T,L的顺序给出相应的赔率。我们需要找到每一行的W,T,L当中最大的一个数,累乘的结果再乘以0.65,按照例子写出表达式即可。 同时还需要记录每一次选择的是W,T还是L

【python】—— Python爬虫实战:爬取珠海市2011-2023年天气数据并保存为CSV文件

目录 目标 准备工作 爬取数据的开始时间和结束时间 爬取数据并解析 将数据转换为DataFrame并保存为CSV文件         本文将介绍如何使用Python编写一个简单的爬虫程序,以爬取珠海市2011年至2023年的天气数据,并将这些数据保存为CSV文件。我们将涉及到以下知识点: 使用requests库发送HTTP请求使用lxml库解析HTML文档使用dateti

Acrobat Pro DC 2023 for Mac/Win:全能型PDF编辑器深度解析

Adobe Acrobat Pro DC 2023作为一款跨平台的PDF编辑器,无论是对于Mac还是Windows用户,都提供了极为全面且强大的PDF处理功能。该软件凭借其卓越的性能和丰富的特性,成为了全球范围内用户处理PDF文档的首选工具。 一、强大的编辑功能 Acrobat Pro DC 2023内置了多种编辑工具,如文本编辑器、图片替换、页面调整等,使用户能够轻松地对PDF文档进行修改和

实习四十:部署project_exam_system项目——及容器的编排

(一)安装docker、编辑daemon.json文件、安装docker-compose编排容器、启动docker 1.环境准备 [root@docker--1 ~]# rz -E   rz waiting to receive.   [root@docker--1 ~]# ls   anaconda-ks.cfg  docker.sh   [root@docker--1 ~]# source