2023年广东省大学生程序设计竞赛题解

比赛链接:The 2023 Guangdong Provincial Collegiate Programming Contest

文章目录

  • A. Programming Contest(签到)
  • B. Base Station Construction(单调队列优化dp)
  • C. Trading(排序)
  • D. New Houses(枚举+排序)
  • E. New but Nostalgic Problem(字典树)
  • F. Traveling in Cells(线段树+树状数组+二分)
  • I. Path Planning(二分)
  • K. Peg Solitaire(DFS)

A. Programming Contest(签到)

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;const int N = 10;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;void solve()
{int x1, x2;cin >> x1;int x; cin >> x;vector<int> a(x);for (int i = 0; i < x; i ++ ) cin >> a[i];cin >> x2;int ans = x2 - x1 + 1;for (auto t : a){if (t >= x1 && t <= x2) ans -- ;}cout << ans << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t--){solve();}
}

B. Base Station Construction(单调队列优化dp)

设计状态 dp[i] 表示前 i 个位置满足条件,且第 i 个位置必选的最小代价,转移方程即为: d p [ i ] = min ⁡ d p [ j ] + a [ i ] dp[i]=\min{dp[j]}+a[i] dp[i]=mindp[j]+a[i],j 需要满足的条件是, [ j , i − 1 ] [j,\ i-1] [j, i1] 没有完整的区间限制

所以我们先在存储限制的时候记录下每个右端点对应的左端点,之后用单调队列更新当前能取的最大的 j

我们可以将 a[n + 1] 赋值为 0,这样最终答案即为 dp[n + 1]

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;const int N = 5e5 + 10;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;void solve()
{int n; cin >> n;vector<int> a(n + 2);for (int i = 1; i <= n; i ++ ) cin >> a[i];a[n + 1] = 0;vector<int> dp(n + 2);int m; cin >> m;vector<int> lt(n + 2);for (int i = 1; i <= m; i ++ ){int l, r; cin >> l >> r;lt[r] = max(l, lt[r]);}deque<int> dq;dq.push_back(0);for (int i = 1; i <= n + 1; i ++ ){dp[i] = dp[dq.front()] + a[i];while (!dq.empty() && dp[dq.back()] > dp[i]) dq.pop_back();dq.push_back(i);while (!dq.empty() && dq.front() < lt[i]) dq.pop_front();}cout << dp[n + 1] << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t--){solve();}
}

C. Trading(排序)

排序即可,便宜的买,贵的卖

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;const int N = 10;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;void solve()
{int n;cin >> n;vector<PII> a(n);for (int i = 0; i < n; i ++ ) cin >> a[i].first >> a[i].second;sort(a.begin(), a.end());int sum = 0;for (auto t : a) sum += t.second;int cnt = sum / 2;int sum1 = 0, sum2 = 0;for (auto t : a){if (t.second <= cnt){sum1 += t.first * t.second;cnt -= t.second;}else if (cnt > 0){sum1 += cnt * t.first;cnt = 0;break;}else if (cnt <= 0) break;} cnt = sum / 2;for (int i = n - 1; i >= 0; i -- ){if (a[i].second <= cnt){sum2 += a[i].first * a[i].second;cnt -= a[i].second;}else if (cnt > 0){sum2 += cnt * a[i].first;cnt = 0;break;}else if (cnt <= 0) break;}cout << sum2 - sum1 << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t--){solve();}
}

D. New Houses(枚举+排序)

根据二者的差值排序,然后枚举多少人没有邻居就可以了

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;const int N = 10;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;void solve()
{int n, m;cin >> n >> m;vector<PII> a(n + 1);for (int i = 1; i <= n; i ++ ) cin >> a[i].first >> a[i].second;auto cmp = [&](PII a, PII b){return a.second - a.first > b.second - b.first;};sort(a.begin() + 1, a.end(), cmp);vector<int> pre1(n + 1), pre2(n + 1);for (int i = 1; i <= n; i ++ ){pre1[i] = pre1[i - 1] + a[i].first;pre2[i] = pre2[i - 1] + a[i].second;}int ans = 0;for (int i = 0; i <= n; i ++ ){int j = n - i;if (j == 1) continue;if (j == 0 && (i - 1) * 2 + 1 > m) continue;else if (j != 0 && i * 2 + j > m) continue;int res = pre2[i] + pre1[n] - pre1[i];ans = max(ans, res);}cout << ans << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t--){solve();}
}

E. New but Nostalgic Problem(字典树)

从左到右确定答案的每一位,假设我们已经确定了前三位 abc,开始枚举第四位,假设枚举到第四位为 g,那么我们的取值是怎样的呢?

首先 abc[a-g] 随便取,因为他们的公共前缀对最终答案不造成影响,然后 abc[h-z] 每种情况只能取一个,因为只要取了两个,就不能保证最终公共前缀是 abcg

如果这样可以选择大于等于 k 个字符串,那么答案的前缀确定是 abcg,如果不能,就要继续枚举第四个字符是其他的情况

前四位确定之后我们要看是不是只有四位呢?

如果答案只有四位的话,abcg[a-z] 每种情况最多取一个,看这样能不能取大于等于 k 个字符串,如果可以的话答案就是 abcg,不能的话再继续枚举第五位

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;const int N = 1e6 + 10;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;int idx, cnt[N], st[N], tr[N][26];int newNode()
{idx++;st[idx] = cnt[idx] = 0;memset(tr[idx], 0, sizeof(tr[idx]));return idx;
}void add(string s)
{int p = 1;// cnt[p] ++ ;for (auto t : s){int c = t - 'a';if (!tr[p][c]) tr[p][c] = newNode();p = tr[p][c];cnt[p] ++ ;}st[p] ++ ;
}void solve()
{idx = 0;newNode();int n, k;cin >> n >> k;for (int i = 0; i < n; i ++ ){string s;cin >> s;add(s);}int p = 1;while (1){int tmp = st[p];for (int i = 0; i < 26; i ++ )if (cnt[tr[p][i]]) tmp ++ ;if (tmp >= k){if (p == 1) cout << "EMPTY";cout << '\n';return;}for (int i = 0; i < 26; i ++ ){if (cnt[tr[p][i]]){tmp += cnt[tr[p][i]] - 1;if (tmp >= k){k -= tmp - cnt[tr[p][i]];p = tr[p][i];cout << (char)(i + 'a');break;}}}}
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t--){solve();}
}

F. Traveling in Cells(线段树+树状数组+二分)

首先看查询操作,很容易想到,就是要找包含起始点的最长子段,子段的左端点和右端点都可以通过二分找到

二分的check函数怎么写呢?以左端点为例,如果 [mid, x] 在集合内的颜色数是 x - mid + 1 个,说明这一段都是满足条件的,mid 可以继续往左搜索,否则往右搜索

现在我们需要的就是,查找 [l, r] 之间第 i 个颜色的出现次数,再把集合内的颜色累加一下得到答案,但是直接加会mle的很惨,所以考虑一下怎么优化

我们可以把所有颜色捡到一棵树上,用动态开点线段树,然后再存储一下每个颜色的树根结点,每次从这个颜色的根节点往下找就可以

最后用树状数组维护一下区间的权值和

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;const int N = 3e5 + 10;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;int n;
int c[N], v[N];
int rt[N], idx;struct node
{int ls, rs, sum;
} tr[N * 10];void modify(int &u, int l, int r, int pos, int val)
{if (!u) u = ++ idx;if (l == r){tr[u].sum += val;return;}int mid = l + r >> 1;if (pos <= mid) modify(tr[u].ls, l, mid, pos, val);else modify(tr[u].rs, mid + 1, r, pos, val);tr[u].sum = tr[tr[u].ls].sum + tr[tr[u].rs].sum;
}int query(int u, int l, int r, int ql, int qr)
{if (!u) return 0;if (l >= ql && r <= qr) return tr[u].sum;int mid = l + r >> 1;int res = 0;if (ql <= mid) res += query(tr[u].ls, l, mid, ql, qr);if (qr > mid) res += query(tr[u].rs, mid + 1, r, ql, qr);return res;
}int ttr[N];int lowbit(int x)
{return x & -x;
}void add(int pos, int val)
{for (int i = pos; i <= n; i += lowbit(i))ttr[i] += val;
}int get_sum(int pos)
{int res = 0;for (int i = pos; i > 0; i -= lowbit(i)) res += ttr[i];return res;
}int get_sum(int l, int r)
{return get_sum(r) - get_sum(l - 1);
}vector<int> cq;bool check(int l, int r, int cnt)
{int res = 0;for (auto t : cq)res += query(rt[t], 1, n, l, r);return res == cnt;
}void get_ans()
{int st, k;cin >> st >> k;cq.clear();for (int i = 1; i <= k; i ++ ){int xx; cin >> xx;cq.push_back(xx);}sort(cq.begin(), cq.end());cq.erase(unique(cq.begin(), cq.end()), cq.end());int l = 1, r = n;int lr = st, rl = st;while (l < lr){int mid = l + lr >> 1;if (check(mid, st, st - mid + 1)) lr = mid;else l = mid + 1;}while (rl < r){int mid = rl + r + 1 >> 1;if (check(st, mid, mid - st + 1)) rl = mid;else r = mid - 1;}cout << get_sum(l, r) << '\n';
}void clear()
{for (int i = 0; i <= idx; i++)tr[i] = {0, 0, 0};for (int i = 1; i <= n; i++)rt[i] = ttr[i] = 0;idx = 0;
}void solve()
{clear();int q;cin >> n >> q;for (int i = 1; i <= n; i ++ ){cin >> c[i];modify(rt[c[i]], 1, n, i, 1);}for (int i = 1; i <= n; i ++ ){cin >> v[i];add(i, v[i]);}while (q -- ){int op, pos, x;cin >> op;if (op == 1){cin >> pos >> x;modify(rt[c[pos]], 1, n, pos, -1);c[pos] = x;modify(rt[c[pos]], 1, n, pos, 1);}else if (op == 2){cin >> pos >> x;add(pos, x - v[pos]);v[pos] = x;}else get_ans();}
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t--){solve();}
}

I. Path Planning(二分)

输入的时候存储每一个数字所在的位置,然后二分,把路径存储下来,按 x 排序,判断 y 有没有不合理的地方即可

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;const int N = 10;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;void solve()
{int n, m;cin >> n >> m;vector<PII> pos(n * m);for (int i = 1; i <= n; i ++ )for (int j = 1; j <= m; j ++ ){int x; cin >> x;pos[x] = {i, j};}auto check = [&](int x){vector<PII> v;for (int i = 0; i < x; i ++ ){v.push_back(pos[i]);}sort(v.begin(), v.end());int tmp = v[0].second;for (int i = 1; i < v.size(); i ++ ){if (v[i].second < tmp) return false;tmp = v[i].second;}return true;};int l = 0, r = n * m;while (l < r){int mid = l + r + 1 >> 1;if (check(mid)) l = mid;else r = mid - 1;}cout << r << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t--){solve();}
}

K. Peg Solitaire(DFS)

数据范围特别小,所以直接打暴力即可

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;const int N = 10;
const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};void solve()
{int n, m, k;cin >> n >> m >> k;vector<vector<int>> g(n + 1, vector<int>(m + 1));vector<vector<int>> st(n + 1, vector<int>(m + 1, -1));for (int i = 0; i < k; i ++ ){int x, y;cin >> x >> y;g[x][y] = 1;}int res = 0;int ans = 0;function<void(int, int)> dfs = [&](int x, int y){for (int i = 0; i < 4; i ++ ){int nx = x + dx[i], ny = y + dy[i];int nnx = nx + dx[i], nny = ny + dy[i];if (nx <= 0 || ny <= 0 || nx > n || ny > m) continue;if (nnx <= 0 || nny <= 0 || nnx > n || nny > m) continue;if (g[nx][ny] == 1 && g[nnx][nny] == 0){g[x][y] = 0;g[nx][ny] = 0;g[nnx][nny] = 1;res ++ ;ans = max(ans, res);for (int ii = 1; ii <= n; ii ++ ){for (int jj = 1; jj <= m; jj ++ ){if (g[ii][jj] == 1) dfs(ii, jj);}}g[x][y] = 1;g[nx][ny] = 1;g[nnx][nny] = 0;res -- ;}}};for (int i = 1; i <= n; i ++ )for (int j = 1; j <= m; j ++ )if (g[i][j] == 1) dfs(i, j);cout << k - ans << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t--){solve();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/7176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码本地化

目的 代码本地化&#xff08;Localization&#xff09;是指将软件应用程序中的文本、图形、声音和其他内容翻译成特定语言的过程&#xff0c;同时确保这些内容在目标文化中适当地呈现。本地化不仅仅是对文本进行翻译&#xff0c;还包括对日期、时间、数字、货币、排序顺序、文本…

04-19 周四 GitHub CI 方案设计

04-19 周四 GitHub CI 方案设计 时间版本修改人描述2024年4月19日14:44:23V0.1宋全恒新建文档2024年4月19日17:22:57V1.0宋全恒完成部署拓扑结构的绘制和文档撰写 简介 需求 由于团队最近把代码托管在GitHub上&#xff0c;为解决推理、应用的自动化CI的需要&#xff0c;调研了…

最近惊爆谷歌裁员

Python团队还没解散完&#xff0c;谷歌又对Flutter、Dart动手了。 什么原因呢&#xff0c;猜测啊。 谷歌裁员Python的具体原因可能是因为公司在进行技术栈的调整和优化。Python作为一种脚本语言&#xff0c;在某些情况下可能无法提供足够的性能或者扩展性&#xff0c;尤其是在…

leetcode_49.字母异位词分组

49. 字母异位词分组 题目描述&#xff1a;给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan"…

MMC设备

MMC&#xff08;MultiMediaCard&#xff09;是一种闪存卡标准&#xff0c;用于作为便携式设备上的存储媒介&#xff0c;例如数码相机、智能手机、平板电脑、个人数字助理&#xff08;PDA&#xff09;以及其他便携式设备。MMC卡最初是由SanDisk和Siemens AG开发的&#xff0c;并…

2、​​​​​​​FreeCAD模块与核心架构总结

FreeCAD作为一个开源的3D建模软件&#xff0c;其内部架构由多个模块组成&#xff0c;这些模块共同协作以支持软件的各种功能。本总结将基于提供的参考文档&#xff0c;对FreeCAD的核心模块、架构特性以及启动过程进行翻译和详细阐述。 核心模块概览 FreeCAD的核心模块主要包括…

分析:Palo Alto在从SASE向SASO演进中定位不佳

摘要 我们通过上一篇文章&#xff08;Fortinet的愿景——超越SASE&#xff09;中应用于Fortinet的相同框架来回顾Palo Alto Network在网络和网络安全方面的前景。 SASE涉及数据传输的第一英里。不过&#xff0c;随着SASE的发展&#xff0c;投资者还需要考虑中间和最后一英里。…

02——线性表

线性表 基本操作 Initlist(&L):初始化表 Length(L):求表长 LocateElem(L,e):按值查找操作 GetElem(L,i):按位查找操作 ListInsert(&L,i,e):插入操作 ListDelete(&L,i,&e):删除操作 PrintList(L):输出操作 Empty(L):判空操作 DestroyList(&L):销毁操作 顺序…

【JavaScript】数据类型转换

JavaScript 中的数据类型转换主要包括两种&#xff1a;隐式类型转换&#xff08;Implicit Type Conversion&#xff09;和显式类型转换&#xff08;Explicit Type Conversion&#xff09;。 1. 隐式类型转换&#xff08;自动转换&#xff09;&#xff1a; js 是动态语言&…

Docker搭建LNMP+Wordpress的实验

目录 一、项目的介绍 1、项目需求 2、服务器环境 3、任务需求 二、Linux系统基础镜像 三、部署Nginx 1、建立工作目录 2、编写Dockerfile 3、准备nginx.conf配置文件 4、设置自定义网段和创建镜像和容器 5、启动镜像容器 6、验证nginx 三、Mysql 1、建立工作目录…

Kalign 3:大型数据集的多序列比对

之前一直用的是muscle&#xff0c;看到一个文章使用了Kalign&#xff0c;尝试一下吧 安装 wget -c https://github.com/TimoLassmann/kalign/archive/refs/tags/v3.4.0.tar.gz tar -zxvf v3.4.0.tar.gz cd kalign-3.4.0 mkdir build cd build cmake .. make make test su…

C++ 中 shared_from_this()的原理与使用

什么是shared_from_this()&#xff1f; 它是一个模板类&#xff0c;定义在头文件 <memory>&#xff0c;其原型为&#xff1a; template< class T > class enable_shared_from_this;std::enable_shared_from_this能让其一个对象&#xff08;假设其名为 t &#xf…

【数据结构与算法】之五道链表进阶面试题详解!

目录 1、链表的回文结构 2、相交链表 3、随机链表的复制 4、环形链表 5、环形链表&#xff08;||&#xff09; 6、完结散花 个人主页&#xff1a;秋风起&#xff0c;再归来~ 数据结构与算法 个人格言&#xff1a;悟已往之不谏&#xff0c;知…

【48天笔试强训】day18

题目1 描述 有一种兔子&#xff0c;从出生后第3个月起每个月都生一只兔子&#xff0c;小兔子长到第三个月后每个月又生一只兔子。 例子&#xff1a;假设一只兔子第3个月出生&#xff0c;那么它第5个月开始会每个月生一只兔子。 一月的时候有一只兔子&#xff0c;假如兔子都…

力扣数据库题库学习(5.6日)--1729. 求关注者的数量

1729. 求关注者的数量 问题链接 思路分析 编写解决方案&#xff0c;对于每一个用户&#xff0c;返回该用户的关注者数量。 按 user_id 的顺序返回结果表。示例 1&#xff1a;输入&#xff1a; Followers 表&#xff1a; ---------------------- | user_id | follower_id | -…

【搜索技能】外链

文章目录 前言一、外链是什么&#xff1f;二、如何进行外链调查&#xff1f;总结 前言 今儿因为在搜索一个很感兴趣的软件&#xff0c;但是软件信息所在的网址非常有限。因此产生了一个念头&#xff1a;我能不能找到所有的包含了或者是引用了这个网站的网站呢? 调查之下&…

C语言面试重点问题

1. 冒泡排序法 2. strlen、strcpy、strcat、strcmp的用法和原理 3. 大小端的区分 3.1 主函数区分大小端 #include <stdio.h>int main(void) {int num 0x11223344;char *p (char *)&num;if (0x11 *p){printf("大端!\n");}else if (0x44 *p){printf(…

解密SSL/TLS:密码套件扫描仪的深度解析(C/C++代码实现)

解密SSL/TLS流量通常是为了分析和审计加密通信&#xff0c;以确保数据传输的安全性和合规性。密码套件扫描仪是实现这一目的的一种工具&#xff0c;它可以提供关于SSL/TLS配置的详细信息&#xff0c;帮助安全专家评估潜在的风险。 SSL/TLS协议基础 SSL/TLS协议是网络安全中不…

select,poll,epoll

在 Linux Socket 服务器短编程时&#xff0c;为了处理大量客户的连接请求&#xff0c;需要使用非阻塞I/O和复用&#xff0c;select&#xff0c;poll 和 epoll 是 Linux API 提供的I/O复用方式。 \selectpollepoll操作方式遍历遍历回调底层实现数组链表哈希表IO效率每次调用都进…

C语言/数据结构——每日一题(环形链表的约瑟夫问题)

一.前言 今天在牛客网上面看到了一道环形链表题&#xff0c;想着和大家们分享一下。可能我有点笨&#xff0c;那道题的链接我没搞好&#xff0c;所以很抱歉&#xff0c;只能麻烦大家们看一下截屏的题目信息了。废话不多数&#xff0c;让我们开始今天的题目分享吧。 二.正文 …