Codeforces Round 1023 (Div. 2) (A-D)
每周至少五篇博客:(1/5)
A. LRC and VIP
题意
您有一个大小 n n n 的数组 a a a - a 1 , a 2 , … a n a_1, a_2, \ldots a_n a1,a2,…an 。
您需要将 n n n 元素分为 2 2 2 序列 B B B 和 C C C ,以满足以下条件:
- 每个元素恰好属于一个序列。
- 两个序列 B B B 和 C C C 至少包含一个元素。
- gcd \gcd gcd ( B 1 , B 2 , … , B ∣ B ∣ ) ≠ gcd ( C 1 , C 2 , … , C ∣ C ∣ ) (B_1, B_2, \ldots, B_{|B|}) \ne \gcd(C_1, C_2, \ldots, C_{|C|}) (B1,B2,…,B∣B∣)=gcd(C1,C2,…,C∣C∣) ∗ ^{\text{∗}} ∗
∗ ^{\text{∗}} ∗ gcd ( x , y ) \gcd(x, y) gcd(x,y) 表示[https://en.wikipedia.org/wiki/wiki/greatest_common_divisor) x x x 和98774178}。
思路
找最大值,把最大值放在一组,其余的放在另一组,如果所有元素值相同,那么无解
代码
void solve() {int n;std::cin >> n;std::vector<PII> a(n);for (int i = 0; i < n; i++) {std::cin >> a[i].first;a[i].second = i;}std::sort(a.begin(), a.end());if (a.front().first == a.back().first) {std::cout << "NO\n";return ;}std::cout << "YES\n";int max = a.back().first;std::sort(a.begin(), a.end(), [](PII p1, PII p2) {return p1.second < p2.second;});for (auto [x, i] : a) {if (x == max) std::cout << "2 ";else std::cout << "1 ";}std::cout << '\n';
}
B. Apples in Boxes
题意
汤姆和杰里在地下室发现了一些苹果。他们决定玩游戏以获取一些苹果。
有 n n n 盒子, i i i \ - th框具有 a i a_i ai 苹果。汤姆和杰里轮流捡起苹果。汤姆首先。依次,他们必须做以下操作:
- 选择一个带有正数的苹果的盒子 i i i ( 1 ≤ i ≤ n 1 \le i \le n 1≤i≤n ),即 a i > 0 a_i \gt 0 ai>0 ,然后从此框中选择 1 1 1 苹果。请注意,这减少了 1 1 1 的 a i a_i ai 。
- 如果没有有效的盒子,当前玩家会输。
- 如果在移动后, max ( a 1 , a 2 , … a n ) − min ( a 1 , a 2 , … , a n ) > k \max(a_1, a_2, \dots a_n) - \min(a_1, a_2, \dots, a_n) > k max(a1,a2,…an)−min(a1,a2,…,an)>k 持有,那么当前的玩家(最后一步)也会输。
如果两个玩家都在最佳比赛中打球,请预测游戏的获胜者。
思路
如果极差大于 k + 1 k + 1 k+1 ,那么tom一定会输,或者极差等于 k + 1 k + 1 k+1, 但是有多个最大值。否则二人会将所有苹果拿光,此时看奇偶性即可
代码
void solve() {int n, k;std::cin >> n >> k;std::vector<i64> a(n);for (int i = 0; i < n; i++) std::cin >> a[i];std::sort(a.begin(), a.end());if (a[n - 1] - a[0] > k + 1) {std::cout << "Jerry\n";return;} else if (a[n - 1] - a[0] == k + 1) {if (a[n - 1] == a[n - 2]) {std::cout << "Jerry\n";return;}}i64 sum = std::accumulate(a.begin(), a.end(), 0ll);if (sum & 1) {std::cout << "Tom\n";} else {std::cout << "Jerry\n";}
}
C. Maximum Subarray Sum
题意
给您一个长度 n n n 的数组 a 1 , a 2 , … , a n a_1,a_2,\ldots,a_n a1,a2,…,an 和一个正整数 k k k ,但是丢失了数组的某些部分 a a a 。您的任务是填充丢失的部分,以使 a a a 的最大子阵列总和 ∗ ^{\text{∗}} ∗ 完全是 k k k ,或报告不存在解决方案。
形式上,给您一个二进制字符串 s s s 和一个部分填充的数组 a a a ,其中:
- 如果您记住 a i a_i ai 的值,则指示这一点,并给出 a i a_i ai 的真实值。
- 如果您不记得 a i a_i ai 的值, s i = 0 s_i = 0 si=0 表示这是 a i = 0 a_i = 0 ai=0 。
您记住的所有值满足 ∣ a i ∣ ≤ 1 0 6 |a_i| \le 10^6 ∣ai∣≤106 。但是,您可以使用最多 1 0 18 10^{18} 1018 的值来填充您不记得的值。可以证明,如果存在解决方案,也存在满足 ∣ a i ∣ ≤ 1 0 18 |a_i| \le 10^{18} ∣ai∣≤1018 的解决方案。
∗ ^{\text{∗}} ∗ 长度 a a a 的最大子阵列总和 n n n ,即 a 1 , a 2 , … a n a_1, a_2, \ldots a_n a1,a2,…an ,定义为{367999959}其中 max 1 ≤ i ≤ j ≤ n S ( i , j ) \max_{1 \le i \le j \le n} S(i, j) max1≤i≤j≤nS(i,j) 其中 S ( i , j ) = a i + a i + 1 + … + a j S(i, j) = a_i + a_{i + 1} + \ldots + a_j S(i,j)=ai+ai+1+…+aj 。
思路
一个经典的dp——求子数组最大和
定义 d p i dp_i dpi 是以 i i i 为结尾的子数组的最大和
转移考虑选不选第 i i i 个的元素 d p i = max ( d p i − 1 + a i , 0 ) dp_i = \max(dp_{i - 1} + a_i, 0) dpi=max(dpi−1+ai,0)
回到本题
考虑什么时候无解,就是当在我们填数之前,已经有一个最大的子数组和满足 > k > k >k ,此时我们无论怎么操作都无法影响,所以无解
换句话说,如果有解的话,必然满足所有最大子数组和都 ≤ k \le k ≤k
另外因为这里涉及到原数组中第 i i i 个元素是否需要填充的问题,所以在处理子数组最大和时,我们应该根据每个需要填数的位置来将原数组分段,再对每段去跑dp
接下来我们只需要选择任意一个填数的位置,算上这个位置两侧的最大子数组和,这里我们需要维护两个dp,分别表示以 i i i 为结尾和以 i i i 为起始的最大子数组和,设填数的位置是 p p p ,那么加上两侧的最大子数组和是 d p p − 1 + d p 2 p + 1 dp_{p - 1} + dp2_{p + 1} dpp−1+dp2p+1 ,要让这个和加上我们填的数 = k = k =k ,所以这个位置填 k − d p p − 1 − d p 2 p + 1 k - dp_{p - 1} - dp2_{p + 1} k−dpp−1−dp2p+1 ,对于其余位置,填 − 1 0 18 -10^{18} −1018 即可
代码
void solve() {i64 n, k;std::cin >> n >> k;std::string s;std::cin >> s;s = "?" + s;std::vector<i64> a(n + 10), dp(n + 10), ndp(n + 20);i64 max = -LINF;bool ex = false;for (int i = 1; i <= n; i++) {bool f = (s[i] == '1');std::cin >> a[i];if (f) {dp[i] = std::max(0ll, dp[i - 1] + a[i]);} else {dp[i] = 0;}max = std::max(max, dp[i]);if (!f) ex = true;}for (int i = n; i >= 1; i --) {bool f = s[i] == '1';if (f) {ndp[i] = std::max(0ll, ndp[i + 1] + a[i]);} else {ndp[i] = 0;}max = std::max(max, ndp[i]);}if ((max != k && !ex) || max > k) {std::cout << "NO\n";return ;}std::cout << "YES\n";for (int i = 1; i <= n; i ++) if (s[i] == '0') {a[i] = k - dp[i - 1] - ndp[i + 1];s[i] = '1';break;}for (int i = 1; i <= n; i ++) if (s[i] == '0') a[i] = -LINF;for (int i = 1; i <= n; i ++) std::cout << a[i] << " ";std::cout << '\n';
}
D. Apple Tree Traversing
题意
有一个带有{888877302}节点的苹果树,最初在每个节点处有一个苹果。您有一张纸,最初没有写任何东西。
只要剩下至少一个苹果,就可以在苹果树上穿越苹果树:
- 选择Apple路径 ( u , v ) (u,v) (u,v) 。当且仅当对路径上的每个节点{894444091}上的每个节点时,路径 ( u , v ) (u,v) (u,v) 被称为Apple路径,上面有一个Apple。
- 令 d d d 为路径上的苹果数量,按照本顺序在纸上写下三个数字 ( d , u , v ) (d,u,v) (d,u,v) 。
- 然后删除路径上的所有苹果 ( u , v ) (u,v) (u,v) 。
在这里,路径 ( u , v ) (u, v) (u,v) 是指从 u u u 到 v v v 的唯一最短步行中的顶点。
让纸上的数字序列为 a a a 。您的任务是找到词典上最大的序列 a a a 。
思路
考虑简化问题——只需要求出第一个三元组即可
那么答案是 d d d 是树的直径, u , v u, v u,v 是满足距离为 d d d 的同时且编号最大的两个点
这个三元组是确定的答案,不存在第二种符合条件的三元组
接下来将 u − v u-v u−v 这条路径的所有边在树上去掉,会发现有多出来了若干棵树,而对于其中每棵树的答案实际上和上面一样都是固定的,并且求法一样
所以可以想到要用分治去做
关于求直径也是很经典的问题了,先任意选一个点进行dfs,把其他点到这个点的距离求出来,然后选择距离最远的点 u u u ,再用这个点 u u u dfs一次求距离,得到的距离 u u u 最远的点 v v v ,这两个点 u , v u, v u,v 的路径就是直径
在这里要多一次遍历,将 u , v u, v u,v 换成编号最大的点
关于删除路径,只需要用一个数组 e x i s t u exist_u existu 表示 u u u 是否还存在于树即可,然后求 u , v u, v u,v 的LCA w w w,接下来遍历 u − w , v − w u-w,v-w u−w,v−w 两条路径,将每个点都 e x i s t i = f a l s e exist_i = false existi=false 即可,至于求LCA我这里是直接用了前两天写的博客的板子[算法学习]——通过RMQ与dfs序实现O(1)求LCA(含封装板子),实际上想了想好像暴力就够了
关于遍历,我们要用一个数组去存当前分治处理的这棵子树有哪些节点,直接 1 − n 1-n 1−n 遍历的话会TLE
这个题思路挺好想,但是代码比较难实现,细节可以看代码
关于时间复杂度是 O ( 能过 ) O(能过) O(能过) ,不太懂证明,听群友说均摊下来是 n n n\sqrt n nn
代码
#include <bits/stdc++.h>using i64 = long long;
using u64 = unsigned long long;typedef std::pair<long long, long long> PII;
const int mod = 998244353;
const int N = 2e6 + 1000;
const int INF = 0x3f3f3f3f;
const long long LINF = 1e18;
const double eps = 1e-12;
const double pi = std::acos(-1);
std::mt19937_64 rnd(std::chrono::steady_clock::now().time_since_epoch().count());
std::uniform_int_distribution<u64> dist_rand(mod / 2, mod - 1);struct LCA {int n, LOG;std::vector<int> l, r, id, dep, parent, lg;std::vector<std::vector<int>> st;const std::vector<std::vector<int>>& adj;int tot = 0;// 构造函数:传入节点数 n(假设节点编号 1..n)、邻接表 adj、根节点 rootLCA(int _n, const std::vector<std::vector<int>>& _adj, int root): n(_n), adj(_adj){LOG = 32 - __builtin_clz(n); // ⌊log2(n)⌋ 的上界l.assign(n+1, 0);r.assign(n+1, 0);id.assign(n+1, 0);dep.assign(n+1, 0);parent.assign(n+1, 0);lg.assign(n+2, 0);// 预处理对数for (int i = 2; i <= n; i++)lg[i] = lg[i>>1] + 1;// 1) 建立 dfs 序,记录 l[u], r[u], id[]dfs(root, 0);// 2) 构建 ST 表用于 RMQst.assign(LOG+1, std::vector<int>(n+2));// 第一层直接存序列上的节点编号for (int i = 1; i <= n; i++)st[0][i] = id[i];// 其余层for (int j = 1; j <= LOG; j++) {for (int i = 1; i + (1<<j) - 1 <= n; i++) {int x = st[j-1][i];int y = st[j-1][i + (1<<(j-1))];// 取深度更小(即在树上更靠近根)的那个st[j][i] = (dep[x] < dep[y] ? x : y);}}}// 返回节点 u 在序列中的位置 l[u], 以及构造 parent, depvoid dfs(int u, int p) {parent[u] = p;dep[u] = dep[p] + 1;l[u] = ++tot;id[tot] = u;for (int v : adj[u]) {if (v == p) continue;dfs(v, u);}r[u] = tot;}// O(1) 查询 LCAint lca(int u, int v) const {// 如果 u 是 v 的祖先,直接返回 u;反之同理if (l[u] <= l[v] && r[u] >= r[v]) return u;if (l[v] <= l[u] && r[v] >= r[u]) return v;// 保证 l[u] < l[v]if (l[u] > l[v]) std::swap(u, v);// 在序列 [l[u]..l[v]] 上做 RMQ,找到深度最小的节点 xint L = l[u], R = l[v];int k = lg[R-L+1];int x1 = st[k][L], x2 = st[k][R - (1<<k) + 1];int x = (dep[x1] < dep[x2] ? x1 : x2);// 这个 x 一定是 u 到 v 路径上,且最靠近根的那个孩子节点,// 它的 parent 就是 LCAreturn parent[x];}
};void solve() {int n;std::cin >> n;std::vector go(n + 1, std::vector<int>());for (int i = 1; i < n; i ++) {int u, v;std::cin >> u >> v;go[u].emplace_back(v);go[v].emplace_back(u);}LCA lca(n, go, 1);int tot = 0;std::vector<int> e(n + 1, 1), f(n + 1), col(n + 1);auto dfs2 = [&](auto &&dfs2, int u, int fa) -> void {f[u] = fa;for (auto v : go[u]) {if (v == fa) continue;dfs2(dfs2, v, u);}};dfs2(dfs2, 1, 1);auto dfs = [&](auto &&dfs, int u, int fa, auto &d, int &sz) -> void {d[u] = d[fa] + 1;sz ++;col[u] = tot;for (auto v : go[u]) {if (v == fa || e[v] == 0) continue;dfs(dfs, v, u, d, sz);}};std::vector<int> s;auto dfs3 = [&](auto &&dfs3, int u, int fa) -> void {s.emplace_back(u);for (auto v : go[u]) {if (v == fa || e[v] == 0) continue;dfs3(dfs3, v, u);}};std::vector<std::array<int, 3>> ans;std::vector<int> d1(n + 1), d2(n + 1);auto solve = [&](auto &&solve, int root) -> void {d1[root] = 0;int sz = 0;tot ++;s.clear();dfs3(dfs3, root, root);dfs(dfs, root, root, d1, sz);if (sz == 1) {ans.push_back({1, root, root});e[root] = 0;return ;}for (int i = 1; i <= n; i ++) if (col[i] == tot) s.emplace_back(i);int max = 0, p = 0, q = -1;for (int i : s) if (d1[i] >= max) {max = d1[i];p = i;}d2[p] = 0;dfs(dfs, p, p, d2, sz);max = 0, p = 0;for (int i : s) if (d2[i] >= max) {max = d2[i];p = i;}d1[p] = 0;dfs(dfs, p, p, d1, sz);for (int i : s) if (d1[i] >= max && p != i) q = i;if (p < q) std::swap(p, q);ans.push_back({max, p, q});int w = lca.lca(q, p);while (p != w) e[p] = 0, p = f[p];while (q != w) e[q] = 0, q = f[q];e[w] = false;for (int i : s) if (e[i]) {solve(solve, i);}};solve(solve, 1);std::sort(ans.begin(), ans.end(), std::greater<>());for (auto [d, u, v] : ans) std::cout << d << ' ' << u << ' ' << v << ' ';std::cout << '\n';
}signed main() {std::ios::sync_with_stdio(false), std::cin.tie(nullptr), std::cout.tie(nullptr);int tmp = 1;std::cin >> tmp;while (tmp--)solve();return 0;
}
相关文章:
Codeforces Round 1023 (Div. 2) (A-D)
每周至少五篇博客:(1/5) A. LRC and VIP 题意 您有一个大小 n n n 的数组 a a a - a 1 , a 2 , … a n a_1, a_2, \ldots a_n a1,a2,…an 。 您需要将 n n n 元素分为 2 2 2 序列 B B B 和 C C C ,以满足以下条件: 每个元素…...
[Survey]Remote Sensing Temporal Vision-Language Models: A Comprehensive Survey
BaseInfo TitleRemote Sensing Temporal Vision-Language Models: A Comprehensive SurveyAdresshttps://arxiv.org/abs/2412.02573Journal/Time2024 arxivAuthor北航 上海AI LabCodehttps://github.com/Chen-Yang-Liu/Awesome-RS-Temporal-VLM 1. Introduction 传统遥感局限…...
Linux56 YUM源配置
epel未启动 显示系统未通过注册 配置YUM仓库 本地YUM仓库 1.备份 tar -zcf repo.tar.gz *.repo 2.挂载 mount -o ro /dev/sr0 /mnt 3.开机自启 chmod x /etc/rc.local echo ‘mount -o ro /dec/sr0 /mnt’ /etc/rc.local 4.编写本地YUM仓库 local.repo [local] namelocal yum …...
mysql 如何查询数据库链接日志
1,查看是否开启日志 SHOW GLOBAL VARIABLES LIKE general_log; -- 查看是否开启通用查询日志(包括连接记录) 1.1,假如没开启,可以临时开启,做测试;服务重启,配置失效…...
Element-Plus-X开源程序是Vue3 + Element-Plus 开箱即用的企业级AI组件库前端的解决方案
一、软件介绍 文末提供程序和源码下载 Element-Plus-X开源程序是Vue3 Element-Plus 开箱即用的企业级AI组件库前端的解决方案。 二、核心特性 ✨ 企业级 AI 组件:内置聊天机器人、语音交互等场景化组件🚀 零配置集成:基于 Element-Plus …...
基于DevSecOps敏捷框架的数字供应链安全应解决方案
基于DevSecOps敏捷框架的数字供应链安全应解决方案是以“AI智能代码疫苗技术”深度赋能原创专利级“多模态SCADevSecOpsSBOM情报预警”的第四代DevSecOps数字供应链安全管理体系,在DevSecOps敏捷安全体系建设、数字供应链安全审查、开源供应链安全治理和云原生安全体系建设四大…...
2025年北京市职工职业技能大赛第六届信息通信行业网络安全技能大赛初赛-wp
- -考试当场没做出来 后面做的 misc ❯ cd misc ❯ ls num.docx num.zip ❯ unzip num.docx Archive: num.docxinflating: [Content_Types].xmlinflating: _rels/.relsinflating: word/document.xmlinflating: word/_rels/document.xml.relsextracting: word/media/image1.jp…...
2、实验室测控系统 - /自动化与控制组件/lab-monitoring-system
76个工业组件库示例汇总 实验室测控系统开发组件 这是一个专为实验室设备数据采集与分析设计的可视化测控系统组件。采用工业风格界面设计,提供了丰富的动态数据展示与分析功能,可应用于各类实验室环境中的设备监控和数据处理。 功能特点 多设备管理…...
Blender插件机制设计与Python实现
Blender插件机制设计与Python实现 Blender的插件机制是其强大扩展性的核心,允许开发者通过Python创建自定义功能。下面我将详细介绍Blender插件系统的设计原理,并提供一个完整的示例。 Blender插件系统设计原理 模块化架构:Blender将插件作…...
自定义一个 Spring Boot Starter -笔记
SpringBoot Starter的介绍参考: Spring Boot Starter简介-笔记-CSDN博客。这里介绍如何自定义一个springBoot Starter。 1. 项目结构 创建一个 Maven 项目,结构如下: custom-spring-boot-starter-demo/ ├── custom-hello-jdk/ # jdk模…...
【Part 2安卓原生360°VR播放器开发实战】第三节|实现VR视频播放与时间轴同步控制
《VR 360全景视频开发》专栏 将带你深入探索从全景视频制作到Unity眼镜端应用开发的全流程技术。专栏内容涵盖安卓原生VR播放器开发、Unity VR视频渲染与手势交互、360全景视频制作与优化,以及高分辨率视频性能优化等实战技巧。 📝 希望通过这个专栏&am…...
读 书 说
好久没有坐下来手敲打字去输出或者记录分享一些比较正式的事情。 今天节后综合征,虽然我已经加了两天班了,但是还是不想加班便准点下班了。 今天来聊聊看书。 为什么会看书?最开始正如我之前提到过,人脉资源不多,也不…...
DOCX转PDF怎么操作最简单?快速将DOCX转换为专业PDF文档
在日常办公或学习中,我们经常需要将 Word 文档(.docx格式)转换为 PDF 文件。这不仅有助于保持文档格式的一致性,还能确保接收者无需特定软件即可查看文件内容。本文将详细介绍几种常见的方法来实现从 DOCX 到 PDF 的转换ÿ…...
免费轻量化办公pdf修改软件 一键格式转换基础修改到高级加密
各位办公软件小能手们!今天咱来聊聊一款超厉害的 PDF 编辑软件——PDFXEdit。你知道吗,这软件就像个 PDF 处理的超级魔法师,能全方位搞定 PDF 文档。下面我就给大家详细说说它的那些功能和适用场景。 首先是基础编辑功能。这软件在文本与图像…...
【HFP】蓝牙语音通信高级功能解析:快速拨号与呼叫等待协议实现
在蓝牙语音通信系统中,除了基础的通话建立与控制流程,高级功能如快速拨号(内存拨号、最后号码重拨)和呼叫等待通知的实现,直接影响着用户体验的便捷性与系统的实用性。这些功能依赖于蓝牙协议中特定的 AT 命令交互、状…...
CVE-2025-24813:Apache Tomcat RCE 漏洞分析
CVE-2025-24813 是 Apache Tomcat 中的一个严重远程代码执行 (RCE) 漏洞,源于路径等效缺陷,允许攻击者绕过安全约束并远程执行任意代码。 CYFIRMA 的研究发现了一些活跃的漏洞利用,一些 PoC 漏洞在地下论坛上流传。攻击者利用基于 HTTP PUT 的任意文件上传、NTFS 连接漏洞利…...
神经网络之训练的艺术:反向传播与常见问题解决之道
神经网络训练的艺术:反向传播与常见问题解决之道 摘要 神经网络是现代机器学习的核心工具之一,而反向传播则是其训练过程中不可或缺的算法。本文深入探讨了反向传播的工作原理以及在训练过程中常见的问题,如梯度消失、梯度爆炸、死 ReLU 单…...
小土堆pytorch--transform
torchvision中的transform torchvision中的transform1. transforms的使用1.1 transforms的结构及用法理论1.2 相应代码1.3 对上述代码的解释 2. 常见的transforms2.1 python 的call函数2.2 ToTensor的使用2.3 Normalize的使用2.4 Resize的使用2.5 Compose的使用2.6 RandomCrop的…...
【Django】REST 常用类
ModelSerializer serializers.ModelSerializer 是 Django REST framework(DRF)里的一个强大工具,它能极大简化序列化和反序列化 Django 模型实例的流程。下面从多个方面详细介绍它: 1. 基本概念 序列化是把 Django 模型实例转化…...
PyTorch常用命令详解:助力深度学习开发
📌 友情提示: 本文内容由银河易创AI(https://ai.eaigx.com)创作平台的gpt-4-turbo模型生成,旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证,建议读者通过官方文档或实践进一步确认其准…...
第二章 Logback的架构(二)
Logger, Appenders 和 Layouts Appenders 和 Layouts 基于日志记录器选择性地启用或禁用日志记录请求只是其中的一部分功能。Logback允许将日志记录请求输出到多个目标。在Logback术语中,输出目标被称为Appender。 目前,已经存在适用于控制台、文件、远…...
【大数据】服务器上部署Apache Paimon
1. 环境准备 在开始部署之前,请确保服务器满足以下基本要求: 操作系统: 推荐使用 Linux(如 Ubuntu、CentOS)。 Java 环境: Paimon 依赖 Java,推荐安装 JDK 8 或更高版本。 Flink 环境: Paimon 是基于 Apache Flink 的…...
【IP101】图像处理进阶:从直方图均衡化到伽马变换,全面掌握图像增强技术
🌟 图像增强魔法指南 🎨 在图像处理的世界里,增强就像是给图片化妆,让它展现出最佳的状态。让我们一起来探索这些神奇的增强术吧! 📚 目录 基础概念 - 图像增强的"美容院"直方图均衡化 - 光线的…...
【Azure Redis 缓存】关于Azure Cache for Redis 服务在传输和存储键值对(Key/Value)的加密问题
问题描述 Azure Cache for Redis 服务在传输和存储数据时是如何加密呢? 问题回答 一:关于Azure cache for Redis服务在数据传输过程中是如何加密的? 为了确保在Azure cache for Redis和客户端应用程序之间传输的数据安全,需要启用…...
Cursor 被封解决方案
一、注册一个无限邮箱 没事点点广告,让网站活久一点(✪ω✪) 2925邮箱-无限邮2925无限邮箱支持多种客户端收发邮件且数据安全加密多端同步。只需要注册一个账号,就能生成无限多个2925子邮箱账号,同时利用一邮多用功能对多个子邮箱邮件进行集…...
spring上传文件添加水印
1、实现 MultipartFile package com.pojo.common.core.domain;import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream;import org.springframework.lang.Nullable; import org.springframework.util.Assert; im…...
CSS分栏布局
分栏布局将区域划分为若干垂直的栏,子元素放置到栏中,填满一个后再填充下一个。如果设置了 column-count 栏数量或 column-width 栏宽度,元素就成为分栏容器。需要注意, column-width 实际上是最小栏宽度。浏览器使用这个值计算栏…...
通过 ModernBERT 实现零样本分类的性能提升
文本分类 是机器学习中最基础的任务之一,拥有悠久的研究历史和深远的实用价值。更重要的是,它是许多实际项目中不可或缺的组成部分,从搜索引擎到生物医学研究都离不开它。文本分类方法被广泛应用于科学论文分类、用户工单分类、社交媒体情感分…...
【AI】Ubuntu 22.04 4060Ti 16G vllm-api部署Qwen3-8B-FP8
下载模型 # 非常重要,否则容易不兼容报错 pip install modelscope -U cd /data/ai/models modelscope download --model Qwen/Qwen3-8B-FP8 --local_dir ./Qwen3-8B-FP8 安装vllm 创建虚拟环境 mkdir vllm cd vllm/ python -m venv venv ource venv/bin/activat…...
QML ProgressBar控件详解
在 QML 中,ProgressBar 是一个常用的进度条控件,用于显示任务的完成进度。以下是 ProgressBar 的详细用法,包括基本用法、自定义样式、动态绑定数据等。 1. 基本用法 1.1 最简单的 ProgressBar import QtQuick.Controls 2.15ProgressBar {w…...
STM32教程:串口USART通讯协议原理及分析(基于STM32F103C8T6最小系统板标准库开发)*详细教程*
前言: 本文主要介绍了单片机的通讯协议和STM32的串口USART通讯的原理及分析。 通信的目的 将一个设备的数据传送到另一个设备,扩展硬件系统。 通信协议 指定通信的规则,通信双方按照协议规则进行数据收发。 STM32常见通讯协议 各通讯特点 USART: TX(发送)、RX(接…...
EDA文件
不同的EDA软件使用不同的文件扩展名和格式,以下是主流工具对应的文件类型: EDA软件文件扩展名说明Altium Designer.PcbDocAltium专属格式,需用原软件打开,可导出为Gerber或STEP文件用于生产。KiCad.kicad_pcbKiCad项目文件&#…...
【C/C++】构造函数与析构函数
📘 C 构造函数与析构函数详解笔记 🧠 为什么需要构造函数与析构函数? 在 C 中,对象创建和销毁过程如果仅靠手动赋值和清理非常容易出错。为此,语言提供了构造函数和析构函数: 构造函数:用于在…...
在Unity AR应用中实现摄像头切换功能
本教程将详细讲解如何在Unity AR Foundation项目中实现前后摄像头切换功能,并提供完整的代码解析。我们将使用AR Foundation的核心组件和简单的UI交互来实现这一功能。 第一部分:环境准备 1.1 所需组件 Unity 2019.4或更高版本 AR Foundation 4.0+ ARCore XR Plugin(Andro…...
Pycharm(十九)深度学习
一、深度学习概述 1.1 什么是深度学习 深度学习是机器学习中的一种特殊方法,它使用称为神经网络的复杂结构,特别是“深层”的神经网络,来学习和做出预测。深度学习特别适合处理大规模和高维度的数据,如图像、声音和文本。深度学习、机器学习和人工智能之间的关系如下图所…...
状态模式 VS 策略模式
在软件开发的世界里,设计模式如同工匠手中的精良工具,能帮助开发者打造出结构清晰、易于维护和扩展的软件系统。状态模式和策略模式便是其中两个常用却容易让人混淆的设计模式。接下来,我们会详细剖析它们的区别、适用场景,并给出…...
如何在 Ubuntu 24.04 本地安装 DeepSeek ?
在本地 Ubuntu 系统上安装 DeepSeek 可以让您在本地使用高级 AI 功能,从而消除对云服务的依赖需求。 What is DeepSeek? DeepSeek 是一个先进的开源人工智能模型,专为自然语言理解和生成而设计。它提供了类似ChatGPT的强大功能。 Prerequisites: A …...
云计算训练营笔记day02(Linux、计算机网络、进制)
Linux 是一个操作系统 Linux版本 RedHat Rocky Linux CentOS7 Linux Ubuntu Linux Debian Linux Deepin Linux 登录用户 管理员 root a 普通用户 nsd a 打开终端 放大: ctrl shift 缩小: ctrl - 命令行提示符 [rootlocalhost ~]# ~ 家目录 /root 当前登录的用户…...
数据库实验10 函数存储
数据库实验10 一、实验目的 掌握函数和存储过程的定义方法,包括标量函数、表值函数、存储过程的语法结构。理解函数和存储过程的作用及原理,区分标量函数与表值函数的应用场景,掌握存储过程的参数传递、逻辑控制和错误处理机制。能够熟练运…...
SQL Server执行安装python环境
安装注意事项 启用python脚本支持 sp_configure external scripts enabled, 1; RECONFIGURE; 安装后接受 Python EULA协议 接受python授权 setup.exe /qs /ACTIONInstall /FEATURESSQL_INST_MR /INSTANCENAME您的实例名 /IACCEPTROPENLICENSETERMS1 /IACCEPTPYTHONLICENSETE…...
ActiveMQ 安全机制与企业级实践(二)
四、企业级实践案例分析 4.1 案例背景介绍 某大型电商企业拥有复杂的分布式系统,涵盖订单管理、库存管理、物流配送、用户服务等多个核心业务模块。在业务快速发展过程中,系统间的通信量呈爆发式增长,为了实现系统的高效解耦和异步通信&…...
ActiveMQ 安全机制与企业级实践(一)
一、引言 在当今数字化时代,企业级应用的架构愈发复杂,各个系统之间的通信和协作变得至关重要。消息队列作为一种高效的异步通信机制,在企业级应用集成中扮演着关键角色。ActiveMQ 作为一款广泛使用的开源消息中间件,以其丰富的功…...
【Python pass 语句】
在 Python 中,pass 语句是一个特殊的空操作(no-op)语句,它的核心作用是保持程序结构的完整性,同时不执行任何实际操作。以下是详细说明: 一、基础特性 语法占位符:当语法上需要一条语句&#x…...
Maven依赖未生效问题
在你描述的情况下,测试类无法找到 Maven 依赖的 jar 包,可能由以下原因导致: 依赖未正确添加到 pom.xml 检查 pom.xml 文件中是否正确添加了 Elasticsearch 和 JUnit 等相关依赖。例如,对于 Elasticsearch 的 TransportClient 相关…...
NGINX `ngx_http_auth_request_module` 模块详解基于子请求的认证授权方案
一、背景介绍 在 Web 系统中,我们常常需要根据外部服务(例如单点登录、API 网关、权限中心)的结果来判断用户是否有权限访问某个资源。NGINX 提供的 ngx_http_auth_request_module 模块,正是为这种场景而生。它允许通过向后端发送…...
Qwen3简要介绍(截止20250506)
Qwen3是阿里云推出的一个大语言模型系列,它在多个方面进行了升级和优化。以下是Qwen3的一些主要特点: 模型规模多样:Qwen3提供了一系列不同规模的模型,包括稠密模型(0.6B、1.7B、4B、8B、14B、32B)以及专家…...
精益数据分析(42/126):移动应用商业模式的深度剖析与实战要点
精益数据分析(42/126):移动应用商业模式的深度剖析与实战要点 在创业和数据分析的学习之路上,我们持续探索不同商业模式的奥秘,今天聚焦于移动应用商业模式。我希望和大家一起进步,深入解读《精益数据分析…...
2025.5.6总结
昨天12:30睡觉,结果翻来覆去睡不着,两点半左右才睡着。看了一下最近的睡眠打卡,平均入睡时间是凌晨12:30。 自五一一个人过了5天,我才明白,人是需要社交的,只有在社交中才能找到自我…...
UE5 脚部贴地不穿过地板方案
UE自带的IK RIG和ControlRig技术 【UE5】角色脚部IK——如何让脚贴在不同斜度的地面(设置脚的旋转)_哔哩哔哩_bilibili 实验后这个还是有一部分问题,首先只能保证高度不能穿过,但是脚步旋转还是会导致穿模 IK前,整个模型在斜坡上会浮空 参考制作:https://www.youtube.com/w…...
Spring AI 函数调用(Function Call)系统设计方案
一、系统概述与设计目标 1.1 核心目标 从零构建一个灵活、安全、高效的函数调用系统,使大语言模型能够在对话中调用应用程序中的方法,同时保持良好的开发体验和企业级特性。 1.2 主要功能需求 支持通过注解将普通Java方法标记为可被AI调用的函数自动生成符合LLM要求的函数…...