2025 XYD Summer Camp 7.21 智灵班分班考 · Day1

智灵班分班考 · Day1

时间线

  • 8:00 在滨兰实验的远古机房中的一个键盘手感爆炸的电脑上开考。
  • 开 T1,推了推发现可以 segment tree 优化 dp,由于按空格需要很大的力气导致马蜂被迫改变。后来忍不住了顶着疼痛按空格。
  • 8:30 过了样例,但是没有大样例,先这样吧。
  • 开 T2,发现每颗子树可以对应到序列上的一段区间,感觉可以区间 dp,但是怎么知道左右儿子的点的左右手写上什么呢?
  • 苦思冥想到 9:45,思考无果打算打一个暴搜,暴搜过程中发现状态数可以直接从 O(n4)O(n^4)O(n4) 降到 O(n3)O(n^3)O(n3),但是我忘了转移还要 O(n)O(n)O(n) 导致我以为我莫名其妙获得正解,于是把暴搜加了个 O(n3)O(n^3)O(n3) 空间复杂度的记忆化数组(n≤500n\le 500n500)。
  • 10:20 开 T3,一眼盯真,维护每个区间的支配点对,这只有 O(nlog⁡V)O(n\log V)O(nlogV) 个,然后转二维数点;二维数点过程中推出了形如给定 [l,r][l,r][l,r],数 l≤u≤v≤rl\le u\le v\le rluvr 的数量,脑子爆炸以为要数 (l,l)(l,l)(l,l)(r,r)(r,r)(r,r) 的矩形,发明了一会儿二维 st 未果,最后注意到只要数 l≤u≤nl\le u\le nlun1≤v≤r1\le v\le r1vr 就可以了。糖丸力
  • 写完调完 T3 是 11:10,赶紧开 T4,一眼盯真,对 dfn 序维护线段树,线段树每个节点维护一个 01 Trie,单点修改就修改一整条链,查询正常查询,时空复杂度 O(nlog⁡nlog⁡V)O(n\log n\log V)O(nlognlogV),赶紧冲!欸之前是不是过来说了啥 T4 某个样例要改一改?算了不管了。
  • 写写写,11:45 分写完,测样例发现错了(其实是因为样例是错的),以为自己读错题了,爆裂鼓手,遗憾离场。

期望得分 100+60+100+70,实际得分 30+0+100+0。挂了 200 分,天下无敌!

总榜排名第 50,下一场需要翻 20+ 名。

题解 & 错因

T1

给定一个长度为 nnn 的数列 aaa,你需要选出若干个不相交也不相邻的区间(即任意两个区间中间至少隔一个元素),一个区间 [l,r][l,r][l,r] 能被选当且仅当 l=rl=rl=r 或者 ∀i∈[l+1,r]\forall i\in[l+1,r]i[l+1,r],满足 ai≥∑j=li−1aja_i\ge\sum_{j=l}^{i-1}a_jaij=li1aj;求所有方案中区间中元素的最大和。

2≤n≤2×1052\le n\le 2\times 10^52n2×1051≤ai≤1091\le a_i\le 10^91ai109

f(i)f(i)f(i) 表示考虑完 [1,i][1,i][1,i] 的答案。注意到以 aia_iai 为选中区间右端点时,最长可选区间的左端点随着 iii 增大单调不降,于是可以双指针维护这个左端点。从 jjj 转移的式子是 f(i)←max⁡k<j−1f(k)+∑k=jiakf(i)\gets \max_{k<j-1}f(k)+\sum_{k=j}^ia_kf(i)maxk<j1f(k)+k=jiak,令 si=∑j=1iais_i=\sum_{j=1}^ia_isi=j=1iai 那么就是 f(i)←max⁡k<j−1f(k)+si−sj−1f(i)\gets \max_{k<j-1}f(k)+s_i-s_{j-1}f(i)maxk<j1f(k)+sisj1,令 g(j)=max⁡k<jf(k)−sjg(j)=\max_{k<j}f(k)-s_{j}g(j)=maxk<jf(k)sj,线段树维护这个东西的区间最大值即可。时间复杂度 O(nlog⁡n)O(n\log n)O(nlogn)

为啥我挂成 30pts 了呢?赛时 g(j)g(j)g(j) 的表达式错误的认为是 f(j−1)−sjf(j-1)-s_{j}f(j1)sj,也就是坚定的认为只要隔一个元素。痛失 70pts。

#include <bits/stdc++.h>
bool MemoryST; using namespace std;
#define ll long long
#define mk make_pair
#define open(x) freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout)
#define lowbit(x) ((x) & (-(x)))
#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
#define BCNT __builtin_popcount
#define cost_time (1e3 * clock() / CLOCKS_PER_SEC) << "ms"
#define cost_space (abs(&MemoryST - &MemoryED) / 1024.0 / 1024.0) << "MB"
const int inf = 0x3f3f3f3f; 
const ll linf = 1e18; 
mt19937 rnd(random_device{}());
template<typename T> void chkmax(T& x, T y) { x = max(x, y); }
template<typename T> void chkmin(T& x, T y) { x = min(x, y); }
template<typename T> T abs(T x) { return (x < 0) ? -x : x; }const int maxn = 2e5 + 5;
int n, a[maxn]; ll sum[maxn];
ll f[maxn];
ll mx[maxn<<2];
// 一开始空格按的难受死了没打空格
void update(int rt){mx[rt]=max(mx[rt<<1],mx[rt<<1|1]);
}void build(int l,int r,int rt){if(l==r){mx[rt]=-1e18;return;}int mid=(l+r)>>1;build(lson),build(rson),update(rt);
}ll query(int l,int r,int rt,int nowl, int nowr){if (nowl > nowr) return 0;if(nowl<= l && r <= nowr) return mx[rt];int mid = (l + r) >> 1; ll res = -1e18;if (nowl <= mid) res = max(res, query(lson, nowl, nowr));if (mid < nowr) res = max(res, query(rson, nowl, nowr));return res;
}
// 忍不住开始打空格
void modify(int l, int r, int rt, int now, ll k) {if (l == r) return mx[rt] = max(mx[rt], k), void(0);int mid = (l + r) >> 1;if (now <= mid) modify(lson, now, k);else modify(rson, now, k);update(rt);
}
bool MemoryED; int main() {scanf("%d",&n),build(0,n,1);for(int i=1;i<=n;i++)scanf("%d",&a[i]),sum[i]=sum[i-1]+a[i];modify(0, n, 1, 0, -sum[1]);modify(0, n, 1, 1, (f[1] = a[1]) - sum[2]);ll ans = a[1];for(int i=2,j=1;i<=n;i++){for(j<i;sum[i-1]-sum[j-1]>a[i];j++);f[i] = f[i - 1];if (j == 1) {chkmax(f[i], sum[i]);modify(0, n, 1, i, sum[i] - sum[i + 1]);} else {chkmax(f[i], query(0, n, 1, j - 2, i - 2) + sum[i]);modify(0, n, 1, i, f[i] - sum[i + 1]);} ans = max(ans, f[i]);}printf("%lld\n", ans);return 0;
}

T2

给定一个长度为 nnn 的序列 aaa,对于所有中序遍历为 1,2,⋯ ,n1,2,\cdots,n1,2,,n 且是以点的编号为键值的二叉搜索树,定义一个点 uuu 的权值是:从 uuu 到根节点的路径中,深度最深的是父节点左儿子的父节点权值(若没有则是 111)乘上深度最深的是父节点右儿子的父节点权值(若没有则是 111),整棵树的权值是所有点的权值的和。求所有树的权值的最大值。

1≤n≤5001\le n\le 5001n5001≤ai≤1071\le a_i\le 10^71ai107

注意到任意一个区间 [l,r][l,r][l,r] 都可以对应一个子树。不妨我们指定 [l,r][l,r][l,r] 这颗子树的根节点是 xxxl≤x≤rl\le x\le rlxr),我们考察 xxx 是哪两个父节点的权值乘积。

由图可知:xxx 的权值就是 al−1×ar+1a_{l-1}\times a_{r+1}al1×ar+1,不妨认为 a0=an+1=1a_0=a_{n+1}=1a0=an+1=1。那就可以进行区间 dp 了,设 f(l,r)f(l,r)f(l,r) 表示子树 [l,r][l,r][l,r] 的最大权值,转移就是
f(l,r)=al−1×ar+1+max⁡l≤x≤rf(l,x−1)+f(x+1,r) f(l,r)=a_{l-1}\times a_{r+1}+\max_{l\le x\le r}f(l,x-1)+f(x+1,r) f(l,r)=al1×ar+1+lxrmaxf(l,x1)+f(x+1,r)
时间复杂度 O(n3)O(n^3)O(n3),空间复杂度 O(n2)O(n^2)O(n2)

为啥赛时没推出来呢?我一直在想能不能把点从根转化为从根到点,这样子权值就变成最后一个满足条件的点而非第一个,然后 balabala 就坠机了。开了一个 500×500×500×2500\times 500\times 500\times 2500×500×500×2 的数组导致 MLE 0pts。

#include <bits/stdc++.h>
bool MemoryST; using namespace std;
#define ll long long
#define mk make_pair
#define open(x) freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout)
#define lowbit(x) ((x) & (-(x)))
#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
#define BCNT __builtin_popcount
#define cost_time (1e3 * clock() / CLOCKS_PER_SEC) << "ms"
#define cost_space (abs(&MemoryST - &MemoryED) / 1024.0 / 1024.0) << "MB"
const int inf = 0x3f3f3f3f; 
const ll linf = 1e18; 
mt19937 rnd(random_device{}());
template<typename T> void chkmax(T& x, T y) { x = max(x, y); }
template<typename T> void chkmin(T& x, T y) { x = min(x, y); }
template<typename T> T abs(T x) { return (x < 0) ? -x : x; }
const int maxn = 505;
int n, a[maxn]; ll f[maxn][maxn];
bool MemoryED; int main() {scanf("%d", &n), a[0] = a[n + 1] = 1;for (int i = 1; i <= n; i ++) scanf("%d", &a[i]);for (int i = 1; i <= n; i ++) f[i][i] = 1ll * a[i - 1] * a[i + 1];for (int len = 2; len <= n; len ++)for (int l = 1, r = l + len - 1; r <= n; l ++, r ++) {for (int x = l; x <= r; x ++)chkmax(f[l][r], (x == l ? 0 : f[l][x - 1]) + (x == r ? 0 : f[x + 1][r]));f[l][r] += 1ll * a[l - 1] * a[r + 1];}printf("%lld", f[1][n]);return 0;
}

T3

给定一个长度为 nnn 的序列 aaaQQQ 次询问,每次给定 [l,r][l,r][l,r](保证 l<rl<rl<r),求
max⁡i,j∈[l,r],i≠jgcd⁡(ai,aj) \max_{i,j\in[l,r],i\ne j}\gcd(a_i,a_j) i,j[l,r],i=jmaxgcd(ai,aj)
n,Q≤2×105n,Q\le 2\times 10^5n,Q2×105

luqyou 在前两天的膜你赛中出了近乎一样的题,且昨天晚上寝室的杂题选讲环节中有人提到了支配点对这个东西。考虑一对 (i1,j1)(i_1,j_1)(i1,j1),如果有一对 (i2,j2)(i_2,j_2)(i2,j2) 满足 i1≤i2<j2≤j1i_1\le i_2<j_2\le j_1i1i2<j2j1gcd⁡(ai1,aj1)≤gcd⁡(ai2,aj2)\gcd(a_{i_1},a_{j_1})\le \gcd(a_{i_2},a_{j_2})gcd(ai1,aj1)gcd(ai2,aj2),那 (i1,j1)(i_1,j_1)(i1,j1) 的贡献就不需要考虑了。也就是说,我们可以找出若干对真正对每个询问有贡献的点对,称为支配点对。哪些点对是支配点对呢?考虑对于每个 ddd,我们找出所有是 ddd 的倍数的 aia_iai 的下标序列 i1,i2⋯ ,iki_1,i_2\cdots,i_ki1,i2,ik,从小到大排序后显然只有 (i1,i2),(i2,i3),⋯(i_1,i_2),(i_2,i_3),\cdots(i1,i2),(i2,i3), 这样的点对可能是支配点对。进一步分析,对于一个 iii,假设在上一步中选出了若干个可能为支配点对的点对 (i,j1),(i,j2),⋯ ,(i,jk)(i,j_1),(i,j_2),\cdots,(i,j_k)(i,j1),(i,j2),,(i,jk) 并且 j1<j2<⋯<jkj_1<j_2<\cdots<j_kj1<j2<<jk;那么对于一个 ju<jvj_u<j_vju<jv,如果 gcd⁡(i,ju)≥gcd⁡(i,jv)\gcd(i,j_u)\ge \gcd(i,j_v)gcd(i,ju)gcd(i,jv) 那么 (i,jv)(i,j_v)(i,jv) 这对点对也没有用了。这样最终的点对数量大概是所有 aia_iai 的因子个数和,但显然远远不到,大概可以估成 O(nlog⁡n)O(n\log n)O(nlogn)。最后做一个二维数点即可。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5, V = 2e5;
int n, Q, a[maxn]; vector<int> tab[maxn];
vector<int> f[maxn]; vector<pair<int, int> > imp[maxn];
#define lowbit(x) ((x) & (-(x)))
struct Point {int x, y, val, qid;
}; vector<Point> p;
int b[maxn], ans[maxn];
void add(int x, int v) { x = n - x + 1;for (; x <= n; x += lowbit(x))b[x] = max(b[x], v);
} int ask(int x) { x = n - x + 1;int res = 0;for (; x; x -= lowbit(x))res = max(res, b[x]);return res;
} 
#define open(x) freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout)
int read() {char c = getchar();for (; c < '0' || c > '9'; c = getchar());int s = 0;for (; c >= '0' && c <= '9'; c = getchar())s = (s << 1) + (s << 3) + (c ^ 48);return s;
}
int main() { // open(data);n = read();for (int i = 1; i <= n; i ++)a[i] = read(), tab[a[i]].push_back(i);for (int i = 2; i <= V; i ++)for (int j = i; j <= V; j += i)if (!tab[j].empty())for (int k : tab[j]) f[i].push_back(k);for (int i = 2; i <= V; i ++) if ((int)f[i].size() > 1) {int len = (int)f[i].size(); sort(f[i].begin(), f[i].end());for (int j = 0; j < len - 1; j ++) {int now = f[i][j], nxt = f[i][j + 1];while (!imp[now].empty() && imp[now].back().second >= nxt) imp[now].pop_back();imp[now].emplace_back(i, nxt);}} for (int i = 1; i <= n; i ++)for (auto j : imp[i]) p.push_back(Point { j.second, i, j.first, 0 });Q = read();for (int i = 1, L, R; i <= Q; i ++) L = read(), R = read(), p.push_back(Point { R, L, 0, i });sort(p.begin(), p.end(), [&](const Point &x, const Point &y) {return x.x == y.x ? y.qid > 0 : x.x < y.x;}); for (Point cur : p) {int x = cur.x, y = cur.y, val = cur.val, qid = cur.qid;if (qid != 0) ans[qid] = max(1, ask(y));else add(y, val);} for (int i = 1; i <= Q; i ++)printf("%d\n", ans[i]);return 0;
} 

唯一一道做对的题

T4

给定一个树,初始只有一个根节点 111QQQ 次操作,要么给定一个点 xxx 和一个 www,在 xxx 节点的孩子中增加一个点,边权为 www;要么给定 u,vu,vu,v,求对于所有 vvv 子树中的点 iiiuuuiii 的路径的边权异或和的最大值。

1≤Q≤2×1051\le Q\le 2\times 10^51Q2×1050≤w≤2300\le w\le 2^{30}0w230

把操作离线下来得到一棵 nnn 个点的树。考虑 u,vu,vu,v 两点间路径异或和就等于 uuu 到根的路径异或和异或上 vvv 到根的路径异或和,那操作就变成:

  • 给一个点一个点权;
  • 给定一个 www 和点 uuu,求 uuu 的子树中所有点权异或上 www 的最大值。

不妨在这棵树上 dfs,每个点维护一个子树中所有点权的 01Trie,每次像线段树合并那样合并孩子的 01Trie;01 Trie 上对每条边维护一个最早建立时间即可。时间复杂度 O(nlog⁡n)O(n\log n)O(nlogn)

赛时做法因为空间爆了只能拿 70pts,好像也能进行类似的离线使空间复杂度下降。

#include <bits/stdc++.h>
bool MemoryST; using namespace std;
#define ll long long
#define mk make_pair
#define open(x) freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout)
#define lowbit(x) ((x) & (-(x)))
#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
#define BCNT __builtin_popcount
#define cost_time (1e3 * clock() / CLOCKS_PER_SEC) << "ms"
#define cost_space (abs(&MemoryST - &MemoryED) / 1024.0 / 1024.0) << "MB"
const int inf = 0x3f3f3f3f; 
const ll linf = 1e18; 
mt19937 rnd(random_device{}());
template<typename T> void chkmax(T& x, T y) { x = max(x, y); }
template<typename T> void chkmin(T& x, T y) { x = min(x, y); }
template<typename T> T abs(T x) { return (x < 0) ? -x : x; }
const int maxn = 2e5 + 5;
int Q, tim[maxn], f[maxn], n; vector<pair<int, int> > que[maxn];
namespace Graph {struct Edge { int to, nxt; } e[maxn << 1];int head[maxn], ecnt;void addEdge(int u, int v) { e[++ ecnt] = Edge { v, head[u] }, head[u] = ecnt; }
} using namespace Graph; char tmp[10];
struct Trie {Trie *son[2]; int create_time;Trie(int t0 = inf) { son[0] = son[1] = nullptr, create_time = t0; }
} *root[maxn];
void insert(Trie *rt, int x, int tim) {Trie *cur = rt;for (int i = 29; ~i; i --)if (x & (1 << i)) {if (cur -> son[1] == nullptr)cur -> son[1] = new Trie();chkmin(cur -> son[1] -> create_time, tim), cur = cur -> son[1];} else {if (cur -> son[0] == nullptr)cur -> son[0] = new Trie();chkmin(cur -> son[0] -> create_time, tim), cur = cur -> son[0];}
} int query(Trie *rt, int x, int tim) {Trie *cur = rt; int ans = 0;for (int i = 29; ~i; i --) if (x & (1 << i)) {if (cur -> son[0] != nullptr && cur -> son[0] -> create_time < tim)ans += (1 << i), cur = cur -> son[0];else cur = cur -> son[1];} else {if (cur -> son[1] != nullptr && cur -> son[1] -> create_time < tim)ans += (1 << i), cur = cur -> son[1];else cur = cur -> son[0];}return ans;
} Trie *merge(Trie *rt, Trie *oth) {if (rt == nullptr) return oth;if (oth == nullptr) return rt;chkmin(rt -> create_time, oth -> create_time);rt -> son[0] = merge(rt -> son[0], oth -> son[0]), rt -> son[1] = merge(rt -> son[1], oth -> son[1]);delete oth; oth = nullptr; return rt;
} int ans[maxn]; void dfs(int u, int fa) {root[u] = new Trie(0); insert(root[u], f[u], tim[u]);for (int i = head[u], v; i; i = e[i].nxt) {if ((v = e[i].to) == fa) continue;dfs(v, u), root[u] = merge(root[u], root[v]);} for (auto [tim, val] : que[u])ans[tim] = query(root[u], val, tim);
} vector<int> qid;
bool MemoryED; int main() {scanf("%d", &Q); int n = 1; tim[1] = f[1] = 0;for (int i = 1, u, v, w; i <= Q; i ++) {scanf("%s", tmp);if (tmp[0] == 'A') {scanf("%d %d", &u, &w), tim[++ n] = i;f[n] = f[u] ^ w, addEdge(n, u), addEdge(u, n);} else scanf("%d %d", &u, &v), que[v].emplace_back(i, f[u]), qid.push_back(i);} dfs(1, 0); for (int i : qid) printf("%d\n", ans[i]);return 0;
}

还是非常好写的。

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

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

相关文章

基于多种主题分析、关键词提取算法的设计与实现【TF-IDF算法、LDA、NMF分解、BERT主题模型】

文章目录有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主一、项目背景二、研究目标与意义三、数据获取与处理四、文本分析与主题建模方法1. 传统方法探索2. 主题模型比较与优化3. 深度语义建模与聚类五、研究成果与应用价值六、总结与展望总结每文一…

MDC(Mapped Diagnostic Context) 的核心介绍与使用教程

关于日志框架中 MDC&#xff08;Mapped Diagnostic Context&#xff09; 的核心介绍与使用教程&#xff0c;结合其在分布式系统中的实际应用场景&#xff0c;分模块说明&#xff1a; 一、MDC 简介 MDC&#xff08;映射诊断上下文&#xff09; 是 SLF4J/Logback 提供的一种线程…

Linux随记(二十一)

一、highgo切换leader&#xff0c;follow - 随记 【待写】二、highgo的etcd未授权访问 - 随记 【待写】三、highgo的etcd未授权访问 - 随记 【待写】3.2、etcd的metric未授权访问 - 随记 【待写】四、安装Elasticsearch 7.17.29 和 Elasticsearch 未授权访问【原理扫描】…

Java环境配置之各类组件下载安装教程整理(jdk、idea、git、maven、mysql、redis)

Java环境配置之各类组件下载安装教程整理&#xff08;jdk、idea、git、maven、mysql、redis&#xff09;1.[安装配置jdk8]2.[安装配置idea]3.[安装配置git]4.[安装配置maven]5.[安装配置postman]6.[安装配置redis和可视化工具]7.[安装配置mysql和可视化工具]8.[安装配置docker]…

配置https ssl证书生成

1.可用openssl生成私钥和自签名证书 安装opensslsudo yum install openssl -y 2.生成ssl证书 365天期限sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \-keyout /etc/ssl/private/nginx-selfsigned.key \-out /etc/ssl/certs/nginx-selfsigned.crt3、按照提示编…

编程语言Java——核心技术篇(四)集合类详解

言不信者行不果&#xff0c;行不敏者言多滞. 目录 4. 集合类 4.1 集合类概述 4.1.1 集合框架遵循原则 4.1.2 集合框架体系 4.2 核心接口和实现类解析 4.2.1 Collection 接口体系 4.2.1.1 Collection 接口核心定义 4.2.1.2 List接口详解 4.2.1.3 Set 接口详解 4.2.1.4…

GaussDB 数据库架构师(八) 等待事件(1)-概述

1、等待事件概述 等待事件&#xff1a;指当数据库会话(session)因资源竞争或依赖无法继续执行时&#xff0c;进入"等待"状态&#xff0c;此时产生的性能事件即等待事件。 2、等待事件本质 性能瓶颈的信号灯&#xff0c;反映CPU,I/O、锁、网络等关键资源的阻塞情况。…

五分钟系列-文本搜索工具grep

目录 1️⃣核心功能​​ ​​2️⃣基本语法​​ 3️⃣​​常用选项 & 功能详解​​ ​​4️⃣经典应用场景 & 示例​​ 5️⃣​​重要的提示 & 技巧​​ ​​6️⃣总结​​ grep 是 Linux/Unix 系统中功能强大的​​文本搜索工具​​&#xff0c;其名称源自 …

Java面试题及详细答案120道之(041-060)

《前后端面试题》专栏集合了前后端各个知识模块的面试题&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

【尝试】本地部署openai-whisper,通过 http请求识别

安装whisper的教程&#xff0c;已在 https://blog.csdn.net/qq_23938507/article/details/149394418 和 https://blog.csdn.net/qq_23938507/article/details/149326290 中说明。 1、创建whisperDemo1.py from fastapi import FastAPI, UploadFile, File import whisper i…

Visual Studio 的常用快捷键

Visual Studio 作为主流的开发工具&#xff0c;提供了大量快捷键提升编码效率。以下按功能分类整理常用快捷键&#xff0c;涵盖基础操作、代码编辑、调试等场景&#xff08;以 Visual Studio 2022 为例&#xff0c;部分快捷键可在「工具 > 选项 > 环境 > 键盘」中自定…

Triton Server部署Embedding模型

在32核CPU、无GPU的服务器上&#xff0c;使用Python后端和ONNX后端部署嵌入模型&#xff0c;并实现并行调用和性能优化策略。方案一&#xff1a;使用Python后端部署Embedding模型 Python后端提供了极大的灵活性&#xff0c;可以直接在Triton中运行您熟悉的sentence-transformer…

Java动态调试技术原理

本文转载自 美团技术团队胡健的Java 动态调试技术原理及实践, 通过学习java agent方式进行动态调试了解目前很多大厂开源的一些基于此的调试工具。 简介 断点调试是我们最常使用的调试手段&#xff0c;它可以获取到方法执行过程中的变量信息&#xff0c;并可以观察到方法的执…

人工智能-python-OpenCV 图像基础认知与运用

文章目录OpenCV 图像基础认知与运用1. OpenCV 简介与安装OpenCV 的优势安装 OpenCV2. 图像的基本概念2.1. 图像的存储格式2.2. 图像的表示3. 图像的基本操作3.1. 创建图像窗口3.2. 读取与显示图像3.3. 保存图像3.4. 图像切片与区域提取3.5. 图像大小调整4. 图像绘制与注释4.1. …

Windows电脑添加、修改打印机的IP地址端口的方法

本文介绍在Windows电脑中&#xff0c;为打印机添加、修改IP地址&#xff0c;从而解决电脑能找到打印机、但是无法打印问题的方法。最近&#xff0c;办公室的打印机出现问题——虽然在电脑的打印机列表能找到这个打印机&#xff0c;但是选择打印时&#xff0c;就会显示文档被挂起…

告别复杂配置!Spring Boot优雅集成百度OCR的终极方案

1. 准备工作 1.1 注册百度AI开放平台 访问百度AI开放平台 注册账号并登录 进入控制台 → 文字识别 → 创建应用 记录下API Key和Secret Key 2. 项目配置 2.1 添加依赖 (pom.xml) <dependencies><!-- Spring Boot Web --><dependency><groupId>o…

「iOS」——内存五大分区

UI学习iOS-底层原理 24&#xff1a;内存五大区总览一、栈区&#xff08;Stack&#xff09;1.1 核心特性1.2 优缺点1.3函数栈与栈帧1.3 堆栈溢出风险二、堆区&#xff08;Heap&#xff09;;2.1 核心特性2.2 与栈区对比三、全局 / 静态区&#xff08;Global/Static&#xff09;3.…

每日一题【删除有序数组中的重复项 II】

删除有序数组中的重复项 II思路class Solution { public:int removeDuplicates(vector<int>& nums) {if(nums.size()<2){return nums.size();}int index 2;for (int i 2; i < nums.size();i ) {if(nums[i] ! nums[index-2]) {nums[index]nums[i];}}return ind…

兼容性问题记录

1、dialog设置高度MATCH_PARENT全屏后&#xff0c;三星机型和好像是一加&#xff0c;会带出顶部状态栏&#xff0c;设置隐藏状态栏属性无效。解决方法&#xff1a;高度不设置为MATCH_PARENT&#xff0c;通过windowmanager.getdefaultdisplay来获取并设置高度&#xff0c;再设置…

6.数组和字符串

在C语言中&#xff0c;数组和字符串是基础且重要的概念。它们用于存储和操作一系列相同类型的元素或字符序列。数组1. 数组定义与初始化数组是一系列相同类型的数据项的集合&#xff0c;这些数据项可以通过一个共同的名字来引用。数组中的每个元素都有一个索引&#xff08;也称…