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

2024.7.20 暑期训练记录(6)

CF

1391D - 505(思维+状压dp)

  • 首先简化问题,发现一个矩阵如果要满足条件,那它其中的每一个 2 × 2 2\times 2 2×2 的小矩阵都要满足条件,于是很容易发现 4 × 4 4\times4 4×4 的矩阵是一定不满足条件的(因为是由四个 2 × 2 2\times2 2×2 的矩阵拼起来的,所以里面的 1 1 1 一定是偶数个),既然如此,更大的矩阵就更不行了,因为里面肯定会包含 4 × 4 4\times4 4×4 的矩阵,所以就把问题简化到 n ≤ 3 n\le3 n3 的情况了
  • n = 1 n=1 n=1 时,没有边长为偶数的子矩阵,所以一定是好矩阵
  • n = 2 n=2 n=2 时,枚举一下第一列有 0 / 1 / 2 0/1/2 0/1/2 1 1 1 的情况,取最小操作数
  • n = 3 n=3 n=3 时,状压dp,用二进制表示每一列的情况, d p [ i ] [ j ] dp[i][j] dp[i][j] 表示第 i i i 列变成状态 j j j 的最小操作数,转移方程 d p [ i ] [ j ] = min ⁡ ( d p [ i ] [ j ] , d p [ i − 1 ] [ k ] + c h a n g e ( i , j ) ) dp[i][j]=\min(dp[i][j],\ dp[i-1][k]+change(i, j)) dp[i][j]=min(dp[i][j], dp[i1][k]+change(i,j)) (如果 k k k j j j 状态合法)
#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;void solve()
{int n, m;cin >> n >> m;vector<vector<char>> g(n + 1, vector<char>(m + 1));for (int i = 1; i <= n; i ++ )for (int j = 1; j <= m; j ++ )cin >> g[i][j];if (n >= 4) cout << -1 << '\n';else if (n == 1) cout << 0 << '\n';else if (n == 2){vector<int> cnt(m + 1);for (int i = 1; i <= m; i ++ ){int tmp = 0;for (int j = 1; j <= n; j ++ ){if (g[j][i] == '1') tmp ++ ;}cnt[i] = tmp;}vector<int> ans(3);for (int k = 0; k < 3; k ++ ){ans[k] += abs(cnt[1] - k);int lst = k;for (int i = 2; i <= m; i ++ ){if (lst & 1){if (cnt[i] & 1) ans[k] ++ ;lst = 0;}else{if (cnt[i] % 2 == 0) ans[k] ++ ;lst = 1;}}}cout << min({ans[0], ans[1], ans[2]}) << '\n';}else if (n == 3){// 将每一列转化成二进制vector<int> mp(m + 1);for (int i = 1; i <= m; i ++ ){int tmp = 0;for (int j = 1; j <= n; j ++ ){if (g[j][i] == '1') tmp += (1ll << (j - 1));}mp[i] = tmp;}// 转化步数auto change = [&](int a, int b){int state = (a ^ b);int ans = 0;for (int i = 0; i < 3; i ++ ){if ((state >> i) & 1) ans ++ ;}return ans;};// 判断相邻状态合法性auto check = [&](int a, int b){int a1 = ((a >> 0) & 1), a2 = ((a >> 1) & 1), a3 = ((a >> 2) & 1);int b1 = ((b >> 0) & 1), b2 = ((b >> 1) & 1), b3 = ((b >> 2) & 1);if ((a1 + a2 + b1 + b2) % 2 == 0) return false;if ((a2 + a3 + b2 + b3) % 2 == 0) return false;return true; };// 初始化vector<vector<int>> dp(m + 1, vector<int>(8, INF));for (int i = 0; i < 8; i ++ ) dp[1][i] = change(mp[1], i);for (int i = 2; i <= m; i ++ ){for (int j = 0; j < 8; j ++ ) // i-1列的状态{for (int k = 0; k < 8; k ++ ) // i列的状态{if (!check(j, k)) continue; // jk作为相邻状态不合法dp[i][k] = min(dp[i][k], dp[i - 1][j] + change(mp[i], k));}}}int ans = INF;for (int i = 0; i < 8; i ++ ) ans = min(ans, dp[m][i]);if (ans == INF) cout << -1 << '\n';else cout << ans << '\n';}
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;// cin >> t;while (t--){solve();}
}

1296E2 - String Coloring (hard version)(思维+dp)

  • 首先想一想什么情况下需要交换呢,即一个字母在另一个字母前面,但是前面的字母比后面的字母大的时候,也就是说,涂同一种颜色的位置必须是单调不减的,我们把涂同一种颜色的位置放在一个集合里,可以证明,所有集合的最后一个位置上的字符一定是单调递减的(感性理解一下,如果有递增的,那直接放到前一个集合就好了,没必要放在下一个集合)所以问题就转化成了求最长下降子序列
  • 应该是一个经典的trick,可以积累一下
  • d p [ i ] dp[i] dp[i] 表示从 [ i , n ] [i,\ n] [i, n] 的最长下降子序列长度, m a x x [ i ] maxx[i] maxx[i] 表示从字母 i + ′ a ′ i+'a' i+a ′ z ′ 'z' z 开头的最长下降子序列长度
#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;void solve()
{int n; cin >> n;string s; cin >> s;s = " " + s;vector<int> dp(n + 1);vector<int> maxx(26);int ans = 0;for (int i = n; i >= 1; i -- ){int c = s[i] - 'a';dp[i] = maxx[c] + 1;for (int j = c + 1; j < 26; j ++ ) maxx[j] = max(maxx[j], dp[i]);ans = max(ans, dp[i]);}cout << ans << '\n';for (int i = 1; i <= n; i ++ ) cout << dp[i] << ' ';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;// cin >> t;while (t--){solve();}
}

1616D - Keep the Average High(思维)

  • 好聪明的做法,先把所有数都减去 x x x,这样需要满足的条件就是 a l + a r > = 0 a_l+a_r>=0 al+ar>=0
  • 然后只需要看连续的长度为 2 2 2 的串和长度为 3 3 3 的串是否满足条件就好了,为什么只需要看这两种呢,因为其他长度的串都可以用这两种拼起来啊,这种想法在今天的第一道 dp 中已经出现过了
#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;void solve()
{int n; cin >> n;vector<int> a(n + 1);for (int i = 1; i <= n; i ++ ) cin >> a[i];int x; cin >> x;for (int i = 1; i <= n; i ++ ) a[i] -= x;int ans = n;for (int i = 2; i <= n; i ++ ){if (a[i] + a[i - 1] + a[i - 2] < 0 || a[i] + a[i - 1] < 0){ans -- ;a[i] = INF;}}cout << ans << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t--){solve();}
}

1978D - Elections(思维+前缀后缀)

  • 贪心一下,想赢的话先删前面的人,前面的人删了还赢不了就删掉后面最大的
#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;void solve()
{int n, c;cin >> n >> c;vector<int> a(n + 1);vector<int> pre(n + 1), maxx_pre(n + 1), maxx_suff(n + 2);for (int i = 1; i <= n; i ++ ) cin >> a[i];for (int i = 1; i <= n; i ++ ) pre[i] = pre[i - 1] + a[i];for (int i = 1; i <= n; i ++ ) maxx_pre[i] = max(maxx_pre[i - 1], a[i]);for (int i = n; i >= 1; i -- ) maxx_suff[i] = max(maxx_suff[i + 1], a[i]);for (int i = 1; i <= n; i ++ ){if (i == 1){if (a[i] + c >= maxx_suff[i + 1]) cout << 0 << ' ';else cout << 1 << ' ';}else if (i == n){if (a[i] > max(maxx_pre[i - 1], a[1] + c)) cout << 0 << ' ';else cout << n - 1 << ' ';}else{if (a[i] > max(a[1] + c, maxx_pre[i - 1])){if (a[i] >= maxx_suff[i + 1]) cout << 0 << ' ';else{if (a[i] + pre[i - 1] + c >= maxx_suff[i + 1]) cout << i - 1 << ' ';else cout << i << ' ';}}else{if (a[i] + pre[i - 1] + c >= maxx_suff[i + 1]) cout << i - 1 << ' ';else cout << i << ' ';}}}cout << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t--){solve();}
}

1979D - Fixing a Binary String(思维)

#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;void solve()
{int n, k;cin >> n >> k;string s;cin >> s;vector<int> a(1);int tmp = 1;for (int i = 1; i < n; i ++ ){if (s[i] != s[i - 1]){a.push_back(tmp);tmp = 1;}else tmp ++ ;}if (tmp != 0) a.push_back(tmp);int pos = -1;int m = a.size() - 1;vector<int> pre(m + 1);for (int i = 1; i <= m; i ++ ) pre[i] = pre[i - 1] + a[i];for (int i = 1; i <= m - 1; i ++ ){if (a[i] != k){if (pos == -1) pos = i;else{cout << -1 << '\n';return;}}}if (pos == -1){if (a[m] == k) cout << n << '\n';else cout << -1 << '\n';}else{if (a[m] == k){if ((m % 2 == 0 && pos % 2 == 0) || (m % 2 != 0 && pos % 2 != 0)){cout << -1 << '\n';}else{if (a[pos] == 2 * k) cout << pre[pos - 1] + k << '\n';else cout << -1 << '\n';}}else{if (a[m] > k) cout << -1 << '\n';else{int tmp = k - a[m];if ((m % 2 == 0 && pos % 2 == 0) || (m % 2 != 0 && pos % 2 != 0)){if (a[pos] >= tmp && ((a[pos] - tmp) == k || (a[pos] - tmp) == 0)) cout << pre[pos - 1] + tmp << '\n';else cout << -1 << '\n';}else cout << -1 << '\n';}}}
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t--){solve();}
}

相关文章:

2024.7.20 暑期训练记录(6)

CF 1391D - 505&#xff08;思维状压dp&#xff09; 首先简化问题&#xff0c;发现一个矩阵如果要满足条件&#xff0c;那它其中的每一个 2 2 2\times 2 22 的小矩阵都要满足条件&#xff0c;于是很容易发现 4 4 4\times4 44 的矩阵是一定不满足条件的&#xff08;因为是…...

firefly rk3288 ubuntu23.10 网卡名为end0 改为eth0

1、内核源码修改u-boot/include/env_default.h文件第32行的bootargs参数&#xff0c;修改后&#xff1a; "bootargs net.ifrenames0 " CONFIG_BOOTARGS "\0"2、修改rootfs里的lib/systemd/network/99-default.link文件&#xff1a; [M…...

git使用总结

概述 简介 Git是一种代码托管技术&#xff0c;很多代码托管平台也是基于Git来实现的。 Git可以帮我们做到很多的事情&#xff0c;比如代码的版本控制&#xff0c;分支管理等。 网址 git官网&#xff1a;https://git-scm.com/ 版本控制系统【VCS】 可以完整保存项目的快照&#…...

使用多进程和多线程实现服务器并发【C语言实现】

在TCP通信过程中&#xff0c;服务器端启动之后可以同时和多个客户端建立连接&#xff0c;并进行网络通信&#xff0c;但是在一个单进程的服务器的时候&#xff0c;提供的服务器代码却不能完成这样的需求&#xff0c;先简单的看一下之前的服务器代码的处理思路&#xff0c;再来分…...

深入理解Linux网络(三):TCP对象创建

深入理解Linux网络&#xff08;三&#xff09;&#xff1a;TCP对象创建 TCP对象创建inet_createsock_init_data TCP对象创建 常见的三句TCP编程&#xff1a; int main() {int sk socket(AF_INET, SOCK_STREAM, 0);connect(sk, ...)recv(sk, ...) }简单的两三⾏代码&#xff…...

windows server——4.安装DNS管理器

windows server——4.安装DNS管理器 一、准备二、安装DNS管理器1.打开服务器管理器2.添加dns服务器 三、验证 一、准备 windows server电脑&#xff08;已安装IIS&#xff09; 静态网站数据包 二、安装DNS管理器 1.打开服务器管理器 2.添加dns服务器 点击管理——添加角色和…...

速盾:金融行业服务器如何避免DDoS攻击?

随着金融行业的数字化和网络化进程加快&#xff0c;服务器成为金融机构不可或缺的一部分。然而&#xff0c;服务器面临的安全威胁也在不断增加&#xff0c;其中之一就是DDoS攻击。DDoS&#xff08;Distributed Denial of Service&#xff09;攻击是通过向目标服务器发送大量无法…...

谷粒商城实战笔记-38-前端基础-Vue-指令-单向绑定双向绑定

文章目录 一&#xff0c;插值表达式注意事项1&#xff1a;不适合复杂的逻辑处理注意事项2&#xff1a;插值表达式支持文本拼接注意事项3&#xff1a;插值表达式只能在标签体中 二&#xff0c;v-html和v-textv-textv-html区别总结&#xff1a;最佳实践 三&#xff0c;v-model复选…...

MyPostMan 迭代文档管理、自动化接口闭环测试工具(自动化测试篇)

MyPostMan 是一款类似 PostMan 的接口请求软件&#xff0c;按照 项目&#xff08;微服务&#xff09;、目录来管理我们的接口&#xff0c;基于迭代来管理我们的接口文档&#xff0c;文档可以导出和通过 url 实时分享&#xff0c;按照迭代编写自动化测试用例&#xff0c;在不同环…...

https和http有哪些区别?

在今天的互联网世界中&#xff0c;我们经常听到关于HTTPS和HTTP的术语。它们都是超文本传输协议&#xff08;HTTP&#xff09;的变种&#xff0c;但它们之间存在着重要的区别。本篇博客将深入探讨HTTPS与HTTP之间的差异以及为什么HTTPS在现代网络中变得如此重要。 目录 1. HT…...

Bubbliiiing 的 Retinaface rknn python推理分析

Bubbliiiing 的 Retinaface rknn python推理分析 项目说明 使用的是Bubbliiiing的深度学习教程-Pytorch 搭建自己的Retinaface人脸检测平台的模型&#xff0c;下面是项目的Bubbliiiing视频讲解地址以及源码地址和博客地址&#xff1b; 作者的项目讲解视频&#xff1a;https:…...

Web前端-Web开发HTML基础8-nav

一. 基础 1. 写一个导航标签&#xff0c;里面是两个超链接&#xff0c;分别指向https://baidu.com和https://huawei.com/cn&#xff1b; 2. 写一个导航标签&#xff0c;里面是三个超链接&#xff0c;分别指向https://baidu.com、https://huawei.com/cn和https://www.nowcoder.c…...

如何建设和维护数据仓库:深入指南

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; V: LAF20151116 进行更多交流学习 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff…...

海思arm-hisiv400-linux-gcc 交叉编译rsyslog 记录心得

需要编译rsyslog,参考海思3536平台上rsyslog交叉编译、使用-CSDN博客和rsyslog移植&#xff08;亲测成功&#xff09;_rsyslog交叉编译-CSDN博客 首先下载了要用到的一些库的源码&#xff0c;先交叉编译这些库 原来是在centos6上交叉编译的&#xff0c;结果编译时报缺少软件要…...

IDEA工具中Java语言写小工具遇到的问题

一&#xff1a;读取excel时遇到 org/apache/poi/ss/usermodel/WorkbookProvider 解决办法&#xff1a; 在pom.xml中把poi的引文包放在最前面即可&#xff08;目前就算放在最后面也不报错了&#xff0c;不知道为啥&#xff09; 二&#xff1a;本地maven打包时&#xff0c;没有…...

2-38 基于matlab的蚁群算法优化无人机uav巡检

基于matlab的蚁群算法优化无人机uav巡检&#xff0c;巡检位置坐标可根据需求设置&#xff0c;从基地出发&#xff0c;返回基地&#xff0c;使得路径最小。可设置蚁群数量&#xff0c;信息素系数。输出最佳路线长度。程序已调通&#xff0c;可直接运行。 2-38 蚁群算法优化无人…...

解决selenium打印保存为PDF时图片未加载成功的问题

使用selenium打印网页时&#xff0c;如果程序运行很快的话&#xff0c;可能会导致图片没有加载成功即进行了保存&#xff0c;出现这个问题最初的思考是在执行打印任务时使用js进行强制等待&#xff0c;后发现实现效果并不好。在加载页面时使用自动下滑的方式将网页拉到底&#…...

如何将PDF转换成可以直接编辑的CAD图纸?

PDF图纸是为了让用户更好的阅览CAD文件&#xff0c;但是&#xff0c;当我们想要对其进行编辑的时候&#xff0c;PDF图纸就是一个麻烦了。那么PDF转换成CAD后可以编辑吗&#xff1f;如何将PDF转换成可以直接编辑的CAD图纸呢&#xff1f;本篇给你答案。 1、启动迅捷CAD编辑器&…...

【STM32】理解时钟树(图示分析)

文章目录 时钟系统什么是时钟时钟树简化图示类比示例时钟树详解时钟源系统时钟配置各总线时钟外设时钟 时钟系统 什么是时钟 时钟在电子和计算机系统中指的是生成周期性信号的电路或设备&#xff0c;这种周期性信号用于同步系统内的各种操作。时钟信号通常是方波&#xff0c;…...

动态内存四个函数

文章目录 1. malloc2. calloc3. realloc4. free 在C语言中&#xff0c;malloc、calloc、realloc 和 free 是用于动态内存管理的标准库函数&#xff0c;它们定义在 <stdlib.h> 头文件中。以下是这些函数的用法&#xff1a; 1. malloc malloc 函数用于在堆区分配指定大小…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...

门静脉高压——表现

一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构&#xff1a;由肠系膜上静脉和脾静脉汇合构成&#xff0c;是肝脏血液供应的主要来源。淤血后果&#xff1a;门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血&#xff0c;引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...

【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项

一、条形码识别改名使用教程 打开软件并选择处理模式&#xff1a;打开软件后&#xff0c;根据要处理的文件类型&#xff0c;选择 “图片识别模式” 或 “PDF 识别模式”。如果是处理包含条形码的 PDF 文件&#xff0c;就选择 “PDF 识别模式”&#xff1b;若是处理图片文件&…...