当前位置: 首页 > news >正文

vp 2025春季PAT甲级

前言

做的最轻松的一场,50分钟AK。
录屏在:https://www.bilibili.com/video/BV1KBfTB2E81

题目总览

image
image
image

题目细览

第1题 A-1 Maximum Product

image

思路

由于可能存在有负数,考虑预处理两个后缀数组suf1和suf2,分别表示后缀最大值和后缀最小值,然后枚举下标i,每次输出std::max(a[i] * suf1[i], a[i] * suf2[i])。

我的AC代码

#include <bits/stdc++.h>using i64 = long long;constexpr int inf = 1E9;void solve() {int n;std::cin >> n;std::vector<int> a(n + 1);for (int i = 1; i <= n; i++) {std::cin >> a[i];}std::vector<int> suf1(n + 2), suf2(n + 2);suf1[n + 1] = -inf, suf2[n + 1] = inf;for (int i = n; i >= 1; i--) {suf1[i] = std::max(suf1[i + 1], a[i]);suf2[i] = std::min(suf2[i + 1], a[i]);}for (int i = 1; i <= n; i++) {std::cout << (std::max(a[i] * suf1[i], a[i] * suf2[i])) << " \n"[i == n];}
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);int T = 1;// std::cin >> T;for (int Ti = 0; Ti < T; Ti++) {solve();}return 0;
}

第2题 A-2 The Best Grouping Balance

image

思路

贪心考虑,将原数组升序排序后,每次拿当前数组的第一个和最后一个组队是最佳的,再将这些队伍的权值都丢进set中,最后set中最大值减去set中最小值就是答案。

我的AC代码

#include <bits/stdc++.h>using i64 = long long;void solve() {int n;std::cin >> n;std::vector<int> a(n);for (int i = 0; i < n; i++) {std::cin >> a[i];}std::sort(a.begin(), a.end());std::set<int> set;for (int i = 0; i < n / 2; i++) {set.insert(a[i] + a[n - 1 - i]);}std::cout << (*set.rbegin() - *set.begin()) << "\n";
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);int T = 1;// std::cin >> T;for (int Ti = 0; Ti < T; Ti++) {solve();}return 0;
}

第3题 A-3 The Farthest Distance in the World

image

思路

其实就是求树的直径,两次dfs即可。

我的AC代码

#include <bits/stdc++.h>using i64 = long long;void solve() {int n;std::cin >> n;std::vector<std::vector<int>> adj(n + 1);int rt = -1;for (int i = 1; i <= n; i++) {int par;std::cin >> par;if (par == -1) {rt = i;} else {adj[par].push_back(i);adj[i].push_back(par);}}std::vector<int> dep(n + 1);std::function<void(int, int)> dfs = [&](int u, int fa) {for (const auto& v : adj[u]) {if (v == fa) {continue;}dep[v] = dep[u] + 1;dfs(v, u);}};dfs(rt, -1);int max = *std::max_element(dep.begin() + 1, dep.end());int t = -1;for (int i = 1; i <= n; i++) {if (dep[i] == max) {t = i;break;}}dep[t] = 0;dfs(t, -1);max = *std::max_element(dep.begin() + 1, dep.end());std::cout << max << "\n";
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);int T = 1;// std::cin >> T;for (int Ti = 0; Ti < T; Ti++) {solve();}return 0;
}

第4题 A-4 Both Expensive and Inexpensive Travel Plan

image

思路

题目的意思是相邻两个节点走权值最大的路径,从起点到终点则走总权值最小的路径,如果存在总权值最小相等的路径,走含interest更多的路径,输出路径或者输出"Sorry"。那么很自然地想到存邻接表的时候只存相邻节点权值最大的边(u, v, w),用dijktra求最短路时多加一个判断,使得走含interest更多的路径,然后再开一个prev的哈希表(或者map)来记录转移过来的路径。

我的AC代码

#include <bits/stdc++.h>using i64 = long long;constexpr int inf = 1E9;void solve() {int n, m;std::cin >> n >> m;std::vector<int> a(n + 1);for (int i = 1; i <= n; i++) {std::cin >> a[i];}std::map<std::array<int, 2>, int> map;std::vector<std::vector<std::array<int, 2>>> adj(n + 1);for (int i = 0; i < m; i++) {int u, v, w;std::cin >> u >> v >> w;if (v > u) {std::swap(u, v);}map[ {u, v}] = std::max(map[ {u, v}], w);}for (const auto& [t, w] : map) {auto [u, v] = t;adj[u].push_back({v, w});adj[v].push_back({u, w});}int st = -1, ed = -1;std::cin >> st >> ed;std::map<int, int> prev;std::vector<int> dist(n + 1, inf);auto dijkstra = [&]() {std::vector<bool> vis(n + 1);using Node = std::array<int, 2>;std::priority_queue<Node, std::vector<Node>, std::greater<>> heap;heap.push({0, st});dist[st] = 0;while (heap.size()) {auto [distance, u] = heap.top();heap.pop();if (vis[u]) {continue;}vis[u] = true;for (const auto& [v, w] : adj[u]) {if (distance + w < dist[v]) {dist[v] = distance + w;heap.push({dist[v], v});prev[v] = u;} else if (distance + w == dist[v] && a[u]) {prev[v] = u;}}}};dijkstra();if (dist[ed] == inf) {std::cout << "Sorry\n";return;}std::cout << dist[ed] << "\n";std::vector<int> ans;ans.push_back(ed);while (ed != st) {ed = prev[ed];ans.push_back(ed);}std::reverse(ans.begin(), ans.end());for (int i = 0; i < ans.size(); i++) {std::cout << ans[i] << (i + 1 == ans.size() ? "\n" : "->");}
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);int T = 1;// std::cin >> T;for (int Ti = 0; Ti < T; Ti++) {solve();}return 0;
}
http://www.jsqmd.com/news/405475/

相关文章:

  • 2026年国内有实力的投影机品牌排行榜,4K投影机/雾幕投影机/山体投影机出租/激光投影机出租,投影机工厂电话 - 品牌推荐师
  • 一天一个Python库:pyjwt - 安全地编码和解码JWT
  • 2026澳门租车市场分析:跨境服务,哪家租车更靠谱?商务车租赁/包车/商务租车/班车租赁/中巴租赁,租车公司推荐排行榜 - 品牌推荐师
  • 2026防火涂料性能全知道:工程选型有妙招,厚型钢结构防火涂料/超薄型钢结构防火涂料,防火涂料实力厂家口碑排行榜 - 品牌推荐师
  • python中的装饰器(1)
  • python基于flask的高校机房设备管理系统vue
  • python基于flask的社区居家日常报修维修平台vue
  • python基于flask的医疗药店连锁药店管理系统vue
  • python基于flask的幼儿园托幼机构管理系统文件vue
  • python基于flask的汽车4s店销售预约试驾vue
  • 探索经典平面手性:基于COMSOL的光学仿真之旅
  • 靠昆虫复眼思路做感知,多小镜头拼接视野,颠覆单镜头,输出全景感知。
  • [LangGrpah] Tool calls demo
  • 凸优化数学基础笔记(八):一维线性搜索法(一)
  • 工业园区的AGV调度是个头疼的问题——既要赶在客户方便的时间送货,又要控制物流成本。最近用MATLAB折腾了个遗传算法方案,实测效果不错,给大家看看实现思路
  • [AI提效-25]-与AI大模型交互:一场接纳人类社会多样性的修行
  • python基于flask的创梦宝大学生创业众筹捐赠平台vue
  • python基于flask的工程公司企业门户网站vue
  • python基于flask的交通违章处理系统的设计与实现vue
  • 99元/年!腾讯云部署OpenClaw,手把手教你打造7×24小时AI私人助手-插件扩展篇
  • 奥特曼:人类吃 20 年饭不如训练 AI,全网炸了,
  • 看完就会:10个降AIGC平台测评,继续教育降AI率全攻略
  • AI提示词管理工具AiShort
  • 主题测试 - -于勤
  • 2.23
  • 基于深度学习电梯扶梯危险行为检测系统的设计与实现
  • Atcoder ARC215 解题报告
  • AI元人文:空性、科学与舞台——基于“自感注册”的存在论拓展
  • 萨瓦瑞亚集团携手马托特和瀚德凯尔荣获艾利斯奖 - TIMWORKROOM
  • 2026国内这十家正规植发机构,排名情况速看,发际线调整/不剃发植发/微针植发/植发/5C美学种植,植发医院排名前十 - 品牌推荐师