2025程序设计天梯赛补题报告
2025程序设计天梯赛补题报告
仅包含L1 L2
L1-6 这不是字符串题
题目描述
因为每年天梯赛字符串题的解答率都不尽如人意,因此出题组从几年前开始决定:每年的天梯赛的 15 分一定会有一道字符串题,另外一道则一定不是字符串题。
小特现在有 N 个正整数 A i A_i Ai,不知道为什么,小特打算"动"一下这些数字。具体而言,她希望做 M 次操作,每次是以下三种操作之一:
- 在当前正整数序列里查找给定的连续正整数序列是否存在,如存在,则将其替换成另外一个正整数序列;
- 对于当前整个正整数序列,如果相邻之间的数字和为偶数,则在它们中间插入它们的平均数;
- 翻转当前正整数序列指定下标之间的一段数字。这里的翻转指的是对于一段数字序列 A i A_i Ai, A i + 1 A_{i+1} Ai+1,…, A j − 1 A_{j-1} Aj−1, A j A_j Aj,将其变为 A j A_j Aj, A j − 1 A_{j-1} Aj−1,…, A i + 1 A_{i+1} Ai+1, A i A_i Ai。
请你输出按输入顺序依次完成若干次操作后的结果。
求解思路
可选2种数据结构维护:
- vector
- string
这里挺有意思的,因为数值大小是1-26所以可以用字符来代替数字
以下是vector的2个在本题涉及的方法
insert
-
插入单个元素:
iterator insert(iterator pos, const T& value);
pos
:插入位置的迭代器。value
:要插入的元素。
-
插入多个相同元素:
iterator insert(iterator pos, size_type count, const T& value);
pos
:插入位置的迭代器。count
:插入元素的数量。value
:要插入的元素。
-
插入范围内的元素:
template<class InputIt> iterator insert(iterator pos, InputIt first, InputIt last);
pos
:插入位置的迭代器。first
:要插入的起始迭代器。last
:要插入的结束迭代器。
-
插入初始化列表中的元素:
iterator insert(iterator pos, std::initializer_list<T> ilist);
pos
:插入位置的迭代器。ilist
:包含要插入元素的初始化列表。
erase
-
删除单个元素:
iterator erase(iterator pos);
pos
:要删除的元素的迭代器。
-
删除范围内的元素:
iterator erase(iterator first, iterator last);
first
:要删除的起始迭代器。last
:要删除的结束迭代器。
实现代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;LL n, m;
vector<LL> a;int main() {cin >> n >> m;for (LL i = 0; i < n; i++) {LL t;cin >> t;a.push_back(t);}while (m--) {LL k;cin >> k;if (k == 1) {LL L1, L2;cin >> L1;vector<LL> a1, a2;for (LL i = 0; i < L1; i++) {LL t;cin >> t;a1.push_back(t);}cin >> L2;for (LL i = 0; i < L2; i++) {LL t;cin >> t;a2.push_back(t);}for (LL i = 0; i < a.size() - L1 + 1; i++) {LL flag = 1;for (LL j = 0, now = i; j < a1.size(); j++, now ++) {if (a[now] != a1[j]) {flag = 0;break;}}if (flag) { // 找到了a.erase(a.begin() + i, a.begin() + i + L1);a.insert(a.begin() + i, a2.begin(), a2.end());break;}}}else if (k == 2) {vector<LL> t;for (LL i = 0; i <a.size() - 1; i++) {t.push_back(a[i]);if ((a[i] + a[i + 1]) % 2 == 0) t.push_back((a[i] + a[i + 1]) / 2);}t.push_back(a.back());a= t;}else if (k == 3) {LL l, r;cin >> l >> r;l--, r--;reverse(a.begin() + l, a.begin() + r + 1);}}for (LL i = 0; i < a.size(); i++) {cout << a[i];if (i != a.size() - 1) cout << " ";}return 0;
}
L1-7 大幂数
题目描述
如果一个正整数可以表示为从 1 开始的连续自然数的非 0 幂次和,就称之为“大幂数”。例如 2025 就是一个大幂数,因为 2025=13+23+33+43+53+63+73+83+93。本题就请你判断一个给定的数字 n 是否大幂数,如果是,就输出其幂次和。
另一方面,大幂数的幂次和表示可能是不唯一的,例如 91 可以表示为 91=11+21+31+41+51+61+71+81+91+101+111+121+131,同时也可以表示为 91=12+22+32+42+52+62,这时你只需要输出幂次最大的那个和即可。
求解思路
实现代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5;LL n;
LL a[N][40];int main() {cin >> n;if (n == 1) {cout << "1^1";return 0;}for (LL j = 1; j <= 31; j++) { // 预处理for (LL i = 1; i < N; i++) {a[i][j] = a[i - 1][j] + pow(i, j);}}for (LL j = 31; j >= 1; j--) {for (LL i = 1; i < N; i++) {if (a[i][j] == n) {for (LL x = 1; x <= i; x++) {if (x != 1) cout << "+";cout << x << "^" << j;}return 0;}else if (a[i][j] > n) break;}} cout << "Impossible for " << n << ".";return 0;
}
L2-1 算式拆解
题目描述
括号用于改变算式中部分计算的默认优先级,例如 2+3×4=14,因为乘法优先级高于加法;但 (2+3)×4=20,因为括号的存在使得加法先于乘法被执行。本题请你将带括号的算式进行拆解,按执行顺序列出各种操作。
注意:题目只考虑 +
、-
、*
、/
四种操作,且输入保证每个操作及其对应的两个操作对象都被一对圆括号 ()
括住,即算式的通用格式为 (对象 操作 对象)
,其中 对象
可以是数字,也可以是另一个算式。
求解思路
这题非常眼熟,在学习stack的时候就学过类似的。反正其实就是一道简单的stack题,当时比赛没写出来还是因为思维不够清晰,应该多训练,这样以后就能对题目的意思更加敏感,就不会写不出。
实现代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;stack<char> s;int main() {string str;getline(cin, str);for (char c : str) {if (c == ')') {string t;while (s.top() != '(') {t += s.top();s.pop();}s.pop(); // pop (reverse(t.begin(), t.end());cout << t << endl;}else s.push(c);}return 0;
}
L2-2 三点共线
题目描述
给定平面上 n 个点的坐标 ( x i x_i xi, y i y_i yi)(i=1,⋯,n),其中 y 坐标只能是 0、1 或 2,是否存在三个不同的点位于一条非水平的直线上?
本题就请你找出所有共线的解。
求解思路
这题直接简单模拟一下是o(n3),n<=5×104,时间限制2s,1s大约可以处理108,那样肯定超时,需要优化到o(n3),那就需要想到把y=2的点换一个情况存,不能在直接vector一个个存了。那就直接开个坐标数组记录一下y=2时在某个x的情况下有没有点存在即可,因为我们这个点的x坐标是直接算出来的,不需要遍历,所以这样存就是最快的。
实现代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;struct coord {LL x, y;
};vector<LL> a0, a1; // 存x,y分别为 0 1
bool a2[3000100];
LL ans0 = 0, ans1 = 0, ans2 = 0, flag = 0;LL n;
LL N = 1e6;int main() {cin >> n;for (LL i = 0; i < n; i++) {LL x, y;cin >> x >> y;if (y == 0) a0.push_back(x);else if (y == 1) a1.push_back(x);else if (y == 2) a2[x + N] = 1; }sort(a0.begin(), a0.end()), sort(a1.begin(), a1.end()); LL qian_x1, flag1 = 0;for (LL i = 0; i < a1.size(); i++) {LL x1 = a1[i];if (i > 0 && a1[i-1] == x1) continue; // 跳过重复的 x1for (LL j = 0; j < a0.size(); j++) {LL x0 = a0[j];if (j > 0 && a0[j-1] == x0) continue; // 跳过重复的 x0LL x2 = x1 + (x1 - x0);// 确保 x2 在有效范围内if (x2 >= -N && x2 <= N && a2[x2 + N]) {flag = 1;printf("[%lld, 0] [%lld, 1] [%lld, 2]\n", x0, x1, x2);}}}if (!flag) cout << -1;return 0;
}
L2-3 胖达的山头
题目描述
胖达是大熊猫的昵称。上图是著名的“西直门三太子”萌兰的一字马。
一只成年大熊猫需要有自己独立的生活区域,如果两只成年大熊猫在同一时间进入同一片区域,很可能会发生打斗事件。
大熊猫保护中心计划将保护区划分成若干座山头,让胖达们都过上没有冲突的安逸生活。当然如果为每位胖达分配一个山头是最理想的,但中心计划安置数十万只胖达 —— 这是个长远计划(截至2024年,世界上共有近 1900 只大熊猫),而保护区面积有限,这样做会使得每个山头面积过于局促。于是中心负责人找到了你,带着所有胖达的活跃时间表,请你帮助他们计算一下,如果让所有活跃时间段内的胖达都位于不同的山头,最少需要建设多少个山头?
求解思路
这题模拟一下就是以时间为坐标,求占用最多占用山头的时候的占用山头数量。然后就可以画出上面的黑线,然后思考怎么求答案呢?那就是只要在每次有新的熊猫占用山头的时候算一下占用数,然后把全部的这个数值取最大值即可(贪心)。
然后怎么维护时间的区间呢?然后就看一下数据大小,时间从从 00:00:00
到 23:59:59
,那其实每一个时间点(按秒算)都可以算一个坐标了,一个数组就能存下,nice!再然后当然不能直接一个一个的点的维护区间了,不然嘎嘎超时,理所应当想到区间用差分,就可以愉快的敲代码了。
实现代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<LL, LL> PII;vector<PII> a; // 存输入的区间信息
LL coord[100000]; // 时间的坐标系
LL n, res = 0;void insert(LL num, LL l, LL r) {coord[l] += num, coord[r + 1] -= num;
}int main() {cin >> n;for (LL i = 0; i < n; i++) {LL h1, m1, s1, h2, m2, s2;scanf("%lld:%lld:%lld %lld:%lld:%lld", &h1, &m1, &s1, &h2, &m2, &s2);LL begin = h1 * 3600 + m1 * 60 + s1, end = h2 * 3600 + m2 * 60 + s2;a.push_back({begin, end});}sort(a.begin(), a.end());for (auto qj : a) { // 区间合并到坐标系上LL begin = qj.first, end = qj.second;insert(1, begin, end);}for (LL i = 1; i < 100000; i++) { // 求前缀和coord[i] += coord[i - 1];}for (auto qj : a) {// 查询每个开始的点对应的数据LL begin = qj.first;res = max(res, coord[begin]);}cout << res;return 0;
}
L2-4 被n整除的n位数
题目描述
"被 n 整除的 n 位数"是这样定义的:记这个 n 位数为 a n a_n an⋯ a 2 a_2 a2 a 1 a_1 a1。首先 a n a_n an 不为 0。从 a n a_n an 开始从左到右扫描每一位数字,前 1 位数(即 a n a_n an)能被 1 整除,前 2 位数 a n a_n an a n − 1 a_{n-1} an−1 能被 2 整除,以此类推…… 即前 i 位数能被 i 整除(i=1,⋯,n)。
例如 34285 这个 5 位数,其前 1 位数 3 能被 1 整除;前 2 位数 34 能被 2 整除;前 3 位数 342 能被 3 整除;前 4 位数 3428 能被 4 整除;前 5 位数 34285 能被 5 整除。所以 34285 是能被 5 整除的 5 位数。
本题就请你对任一给定的 n,求出给定区间内被 n 整除的 n 位数。
友情提示:被偶数整除的数字一定以偶数结尾;被 5 整除的数字一定以 5 或 0 结尾;被 10 整除的数字一定以 0 结尾。
求解思路
这题可以看到这个数字可以是从高位开始一位一位生成的,可以用dfs。然后看到题目中的一堆条件就知道肯定可以剪枝,这样优化后就能够过题了。
实现代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;int n;
long long a, b;
vector<long long> results;// DFS函数,depth表示当前处理的位数,current表示当前构造的数字
void dfs(int depth, long long current) {// 如果已经构造了n位数if (depth == n) {if (a <= current && current <= b) {results.push_back(current);}return;}// 确定当前位可以尝试的数字int start_digit = (depth == 0) ? 1 : 0;for (int digit = start_digit; digit <= 9; digit++) {long long new_num = current * 10 + digit;// 区间剪枝:检查是否可能在区间内long long min_possible = new_num * pow(10, n - depth - 1);if (min_possible > b) {break; // 后续数字更大,直接退出}long long max_possible = min_possible + pow(10, n - depth - 1) - 1;if (max_possible < a) {continue; // 即使后续位全是9,也小于a,跳过}// 整除性剪枝if ((depth + 1) > 0 && new_num % (depth + 1) != 0) {continue;}// 尾数剪枝if ((depth + 1) % 2 == 0 && digit % 2 != 0) {continue; // 偶数位必须是偶数结尾}if ((depth + 1) % 5 == 0 && digit != 0 && digit != 5) {continue; // 5的倍数位必须是0或5结尾}if ((depth + 1) % 10 == 0 && digit != 0) {continue; // 10的倍数位必须是0结尾}// 继续DFSdfs(depth + 1, new_num);}
}int main() {cin >> n >> a >> b;// 检查a和b是否都是n位数long long min_n_digit = pow(10, n-1);long long max_n_digit = pow(10, n) - 1;// 调整a和b到n位数的范围内a = max(a, min_n_digit);b = min(b, max_n_digit);if (a > b) {cout << "No Solution" << endl;return 0;}dfs(0, 0);if (results.empty()) {cout << "No Solution" << endl;} else {for (long long result : results) {cout << result << endl;}}return 0;
}
相关文章:

2025程序设计天梯赛补题报告
2025程序设计天梯赛补题报告 仅包含L1 L2 L1-6 这不是字符串题 题目描述 因为每年天梯赛字符串题的解答率都不尽如人意,因此出题组从几年前开始决定:每年的天梯赛的 15 分一定会有一道字符串题,另外一道则一定不是字符串题。 小特现在有…...

SpringBoot3.4.5下Lombok的@Data注解不生效,解决方案
程序员Feri一名12年的程序员,做过开发带过团队创过业,擅长Java、嵌入式、鸿蒙、人工智能等,专注于程序员成长那点儿事,希望在成长的路上有你相伴!君志所向,一往无前! 1.问题 最近的项目是Python、Java、鸿蒙的来回交叉,再做的一个Java的项目…...
iOS设备投屏Archlinux
我的iphone手机屏太小,我想把手机投到archlinux电脑上看。与是我就想找一个免费的软件。 UxPlay https://github.com/FDH2/UxPlay GPLv3,开源。原来只支持 AirPlay Mirror 协议,现在新增 支持来自 AirPlay 的纯音频 (Apple Los…...

如何在 Windows 上安装类似 Synaptic 的 Chocolatey GUI 包管理器
如果你正在寻找类似 Linux 中 APT 的 Windows 包管理器,那么没有什么比 Chocolatey 更好的了。它是 Windows 10 上可用的最佳包管理器之一,可以通过命令行界面安装所有流行的软件和工具。然而,这并不意味着如果你不喜欢命令行,你就…...

Guided Filtering相关记录
一、背景介绍 以前折腾保边滤波时候,刷了一些Guided Filtering相关资料。这里主要是对它们做个算法效果复现和资料简单整理。 二、Guided Filtering 1、基本原理 原版Guided Filtering的提出,主要是为了改善双边滤波做保边平滑滤波器时候的梯度翻转伪影…...

智能AI构建工地安全网:跌倒、抽搐、区域入侵多场景覆盖
智能AI在工地安全中的应用:从监测到救援的全流程实践 一、背景:高温作业下的工地安全挑战 随着夏季高温持续,工地户外作业环境面临严峻考验。工人因高温疲劳、脱水或突发疾病引发的行为异常(如晕厥、抽搐、跌倒)频发…...
MySQL 8.0 OCP 1Z0-908 121-130题
Q121.Examine these statements and output: mysql> GRANT PROXY ON accountinglocalhost TO ’ ‘ ‘%’; mysql> SELECT USER(), CURRENT_USER(), proxy_user; --------------------------------------------------------- |USER() | CURRENT_USER() | proxy_user I | …...

Spring+LangChain4j小智医疗项目
这里写目录标题 LangChain4j入门配置测试Ollama阿里云百炼平台AIService聊天记忆隔离聊天 MongoDB持久化存储Prompt*创建小智医疗助手Function Calling(Tools)实战小智医疗智能体 RAGToken分词器向量存储流式输出总结 LangChain4j入门 LangChain4j 是一…...

解决“VMware另一个程序已锁定文件的一部分,进程无法访问“
问题描述 打开VMware里的虚拟机时,弹出"另一个程序已锁定文件的一部分,进程无法访问"如图所示: 这是VM虚拟机的保护机制。虚拟机运行时,为防止数据被篡改,会将所运行的文件保护起来。当虚拟机崩溃或者强制…...

buuctf Crypto-鸡藕椒盐味1
1.题目: 公司食堂最新出了一种小吃,叫鸡藕椒盐味汉堡,售价八块钱,为了促销,上面有一个验证码,输入后可以再换取一个汉堡。但是问题是每个验证码几乎都有错误,而且打印的时候倒了一下。小明买到了一个汉堡&a…...

FreeRTOS的学习记录(基础知识)
FreeRTOS 简介 FreeRTOS 是一个开源的实时操作系统(RTOS),专为嵌入式系统设计。它提供了任务管理、时间管理、信号量、消息队列、内存管理等功能,适用于资源受限的微控制器。 FreeRTOS 是一个开源的实时操作系统内核,…...

会议分享|高超声速流动测量技术研讨会精彩探析
由中国空气动力学会测控专业委员会主办,中国科学技术大学工程科学学院承办的第八届三次委员会暨高超声速流动测量技术研讨会,5月16日在合肥盛大开幕。 会议专家报告分享了高超声速流动测量的最新研究成果、挑战与突破,展示了PIV高速摄像机、粒…...

1-10 目录树
在ZIP归档文件中,保留着所有压缩文件和目录的相对路径和名称。当使用WinZIP等GUI软件打开ZIP归档文件时,可以从这些信息中重建目录的树状结构。请编写程序实现目录的树状结构的重建工作。 输入格式: 输入首先给出正整数N(≤104)…...
redis开源协议的变更和使用影响
2013年:采用 BSD 协议 核心内容:Redis 最初采用 BSD 3-Clause 协议,允许用户自由使用、修改和分发代码,包括闭源商业用途。这种宽松的协议促进了 Redis 的快速普及,尤其是云计算厂商将其作为托管服务的基础。 影响:云服务商(如 AWS、阿里云等)可合法地将 Redis 集成到其…...
数据库的锁 - 全局锁、表锁、行锁
目录 一、全局锁 1.1 介绍 1.2 语法 1). 加全局锁 2). 数据备份 3). 释放锁 1.3 特点 二、表级锁 2.1 表锁 2.2 元数据锁(MDL) 2.3 意向锁 三、行级锁 3.1 行锁 3.2 间隙锁 & 临键锁 一、全局锁 1.1 介绍 全局锁是对整个数据库实…...

Unix/Linux | A Programming Guide
注:本文为 “UNIX / Linux 教程” 相关文章合辑。 略作重排,如有内容异常,请看原文。 UNIX / Linux Tutorial for Beginners: Learn Online in 7 days By : Emily Carter UpdatedFebruary 5, 2025 UNIX / Linux Tutorial Summary Linux …...

前端——布局方式
普通流(标准流) 所谓的标准流: 就是标签按照规定好默认方式排列. 1. 块级元素会独占一行,从上向下顺序排列。 常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table 2. 行内元素会按照顺序,从左到右顺序排列&am…...

Multimodal models —— CLIP,LLava,QWen
目录 CLIP CLIP训练 CLIP图像分类 CLIP框架 Text Enocder Image Encoder LLava系列 LLava LLava贡献 LLava模型结构 总结 LLava两阶段训练 LLava 1.5 LLava 1.6 QWen CLIP CLIP是OpenAI 在 2021 年发布的,最初用于匹配图像和文本的预训练神经网络模型…...
Python模块化编程进阶指南:从基础到工程化实践
一、模块化编程核心原理与最佳实践 1.1 模块化设计原则 根据企业级项目实践,模块化开发应遵循以下核心原则: 单一职责原则:每个模块只承担一个功能域的任务(如用户认证模块独立于日志模块)接口隔离原则…...
json-server的用法-基于 RESTful API 的本地 mock 服务
json-server 是一个非常方便的工具,用于快速搭建基于 RESTful API 的本地 mock 服务,特别适合前端开发阶段模拟后端数据接口。 🧩 一、安装 npm install -g json-server🚀 二、快速启动 创建一个 db.json 文件(模拟数…...

LabVIEW与PLC通讯程序S7.Net.dll
下图中展示的是 LabVIEW 环境下通过调用S7.Net.dll 组件与西门子 PLC 进行通讯的程序。LabVIEW 作为一种图形化编程语言,结合S7.Net.dll 的.NET 组件优势,在工业自动化领域中可高效实现与 PLC 的数据交互,快速构建工业监控与控制应用。相较于…...
STM32 __main汇编分析
在STM32的启动流程中,__main是一个由编译器自动生成的C标准库函数,其汇编级调用逻辑可通过启动文件(如startup_stm32fxxx.s)观察到,但具体实现细节被封装在编译器的运行时库中。以下是其核心逻辑解析: 一、…...

使用GpuGeek高效完成LLaMA大模型微调:实践与心得分享
使用GpuGeek高效完成LLaMA大模型微调:实践与心得分享 🌟嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 随着大模型的发展࿰…...

华为IP(6)
VLAN聚合 VLAN聚合产生的技术背景 在一般是三层交换机中,通常采用一个VLAN接口的方式实现广播域之间的互通,这在某些情况下导致了IP地址的浪费 因为一个VLAN对应的子网中,子网号、子网广播地址、子网网关地址不能用作VLAN内的主机IP地址&a…...

1:OpenCV—图像基础
OpenCV教程 头文件 您只需要在程序中包含 opencv2/opencv.hpp 头文件。该头文件将包含应用程序的所有其他必需头文件。因此,您不再需要费心考虑程序应包含哪些头文件。 例如 - #include <opencv2/opencv.hpp>命名空间 所有 OpenCV 类和函数都在 cv 命名空…...

第三部分:内容安全(第十六章:网络型攻击防范技术、第十七章:反病毒、第十八章:入侵检测/防御系统(IDS/IPS))
文章目录 第三部分:内容安全第十六章:网络型攻击防范技术网络攻击介绍流量型攻击 --- Flood攻击单包攻击及防御原理扫描窥探攻击畸形报文攻击Smurf攻击Land攻击Fraggle攻击IP欺骗攻击 流量型攻击防御原理DDoS通用攻击防范技术 ---- 首包丢弃TCP类攻击SYN…...

Void: Cursor 的开源平替
GitHub:https://github.com/voideditor/void 更多AI开源软件:发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI Void,这款编辑器号称是开源的 Cursor 和 GitHub Copilot 替代品,而且完全免费! 在你的代码库…...

100G QSFP28 BIDI光模块一览:100G单纤高速传输方案|易天光通信
目录 前言 一、易天光通信100G QSFP28 BIDI光模块是什么? 二、易天光通信100G QSFP28 BIDI光模块采用的关键技术 三、100G QSFP28 BIDI光模块的优势 四、以“易天光通信100G BIDI 40km ER1光模块”为例 五、总结:高效组网,从“减”开始 关于…...
基于大模型的脑出血智能诊疗与康复技术方案
目录 一、术前阶段1.1 数据采集与预处理系统伪代码实现流程图1.2 特征提取与选择模块伪代码实现流程图1.3 大模型风险评估系统伪代码实现流程图二、术中阶段2.1 智能手术规划系统伪代码实现流程图2.2 麻醉智能监控系统伪代码实现流程图三、术后阶段3.1 并发症预测系统伪代码片段…...

卓力达电铸镍网:精密制造与跨领域应用的创新典范
目录 引言 一、电铸镍网的技术原理与核心特性 二、电铸镍网的跨领域应用 三、南通卓力达电铸镍网的核心优势 四、未来技术展望 引言 电铸镍网作为一种兼具高精度与高性能的金属网状材料,通过电化学沉积工艺实现复杂结构的精密成型,已成为航空航天、电…...