2024信友队智灵班春季 Test1 总结

4月模考


死亡回放 模考时间线

  • 1:30 比赛开始,读 T1 宇宙爆炸 的题
  • 1:50 自己手模了几组样例,得出了一个错误结论,打出了第一版错误代码,然后上交( Wrong Answer 20 \color{red}\text{Wrong\ Answer\ 20} Wrong Answer 20
  • 中间拿了 T2 逃狱风云 的部分分( Wrong Answer 10 \color{red}\text{Wrong\ Answer\ 10} Wrong Answer 10最终分数),之后在想 T3 奇怪物语,然后推出需要用到二进制,但是想不出来,交了一个暴搜(?( Time Limit Exceeded 20 \color{blue}\text{Time\ Limit\ Exceeded\ 20} Time Limit Exceeded 20
  • 3:00 返回去检查 T1 宇宙爆炸 正确性,发现果然有问题!迅速修改了一下,把栈改成队列,再交了一发( Wrong Answer 60 \color{red}\text{Wrong\ Answer\ 60} Wrong Answer 60​)
  • 然后发现还是有问题!于是又改了改交了一发( Accepted 100 \color{green}\text{Accepted\ 100} Accepted 100
  • 可是我不自信啊!就把部分分改成了暴力,然后暴力挂了!( Wrong Answer 65 \color{red}\text{Wrong\ Answer\ 65} Wrong Answer 65最终分数
  • 后面的时间要么在发呆,要么在狂想 T3 奇怪物语,中间好不容易意识到写个递推拿的分更多,但是 5 × 1 0 7 5\times 10^7 5×107 的空间复杂度我开成了 long long Time Limit Exceeded 0 \color{blue}\text{Time\ Limit\ Exceeded\ 0} Time Limit Exceeded 0最终分数
  • T4 东部世界 就没有去推了qwq

死因分析 错误点分析

  • 应该多去拿每个题的部分分的,简单的式子都去推一下!
  • 暴力也得去验证是否正确!
  • 应该要意识到空间复杂度的影响!
  • 题目中给的提示得最大化使用!

死亡证明 成绩

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

遗书 各题错误思路 & 正解

T1 宇宙爆炸

给定一个由等量的 0 0 0 1 1 1 组成的环 s s s,各有 n n n 个。对于每一个 1 1 1,如果其逆时针方向上第一个元素为 0 0 0,则它们会被一起删除,环会重新接上,这个过程一直重复直到不存在可以删除的元素。现在要求出一些位置,使得在这些位置插入一个 1 1 1 后,这个 1 1 1​ 不会被删除。

对于所有数据,保证: 1 ≤ n ≤ 1 0 6 1\le n\le 10^6 1n106 s i ∈ { 0 , 1 } s_i\in\{0,1\} si{0,1}

错误思路

就不该加暴力!也不知道暴力哪错了……

正解

场上想的:遍历两遍环,开一个队列存当前这个环(不同起点),在队列里执行湮灭操作;在第二遍遍历的时候,如果发现将 x x x 加入队列后发生湮灭,且湮灭完了队列为空,则说明 x x x 后面一个元素是安全的。这很好想:如果某一时刻还剩下的元素没有被湮灭完,那么此时加入肯定会代替后面的某个元素进行湮灭操作。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 5;
char s[maxn << 2]; int n;
int q[maxn << 3],ans[maxn << 1],tot; int l,r;
int main() {freopen("bigbang.in","r",stdin);freopen("bigbang.out","w",stdout);scanf("%d%s",&n,s + 1);n <<= 1; for (int i = 1;i <= n;i ++)s[i + n] = s[i];l = 1,r = 0;for (int i = 1;i <= (n << 1);i ++) {while (l <= r && q[l] <= i - n) l ++;if (l > r) { q[++ r] = i; continue; }if (s[q[r]] == '1' && s[i] == '0') {r --;if (l > r && i > n) ans[++ tot] = i - n;} else q[++ r] = i;}sort(ans + 1,ans + tot + 1);int x = unique(ans + 1,ans + tot + 1) - ans - 1;for (int i = 1;i <= x;i ++) printf("%d%c",ans[i]," \n"[i == x]);return 0;
}

T2 逃狱风云

各有 n n n 个犯人、盒子和纸条,编号均为 1 → n 1\to n 1n。每张纸条随机放入不同的每个盒子里。每个犯人都需要按照一定策略在 n n n 个盒子中挑选 k k k 个打开,如果没有看见自己编号的纸条则所有人都将被处决。否则全员释放。求在最优策略下全员释放的概率。犯人与犯人之间无影响。

提示:最优策略为: i i i 号犯人先打开 i i i 号盒子,然后根据看到的纸条编号打开对应编号的盒子,直到 k k k 次用完或看到自己的纸条。

错误思路

压根不觉得这个提示是最优策略,以为只是针对于该样例而言可能的一个策略。然后就没有了,拿了 10 10 10 pts部分分。

正解

按照提示给定的策略,按照盒子与纸条的关系建一张图 G G G,如果 i i i 号盒子中放着 j j j 号纸条,则 i i i j j j 连一条有向边。 G G G 中一共 n n n 个点、 n n n 条边,且每个点各有一条入边、出边。 G G G 一定由若干个互不相交的环组成。如果所有环的大小均不大于 k k k,那么所有犯人都能通过 k k k 步走到自己编号的点上。则题目转化为求 n ! n! n! 种图中所有环的大小都不大于 k k k 的概率。

f i f_i fi 表示 i i i 个点的图中,所有环大小均不大于 k k k 的张数, g i g_i gi 表示概率。显然 g i = f i i ! g_i=\cfrac{f_i}{i!} gi=i!fi,且对于 i ≤ k i\le k ik f i = i ! , g i = 1 f_i=i!,g_i=1 fi=i!,gi=1。转移 f i f_i fi 时枚举包含第 i i i 个点的环的大小 j j j j ≤ k j\le k jk),则这个环不包含 j j j 会有 A i − 1 j − 1 A^{j-1}_{i-1} Ai1j1 种形态,剩下 i − j i-j ij 个点合法的方案数为 f i − j f_{i-j} fij,故转移方程为:
f i = ∑ j = 1 k A i − 1 j − 1 × f i − j = ∑ j = 1 k ( i − 1 ) ! ( i − j ) ! f i − j f_i=\sum^k_{j=1}A^{j-1}_{i-1}\times f_{i-j}=\sum^k_{j=1}\cfrac{(i-1)!}{(i-j)!}f_{i-j} fi=j=1kAi1j1×fij=j=1k(ij)!(i1)!fij
此时把 f i f_i fi 推广到 g i g_i gi,可以得到最终的递推式:(把 ( i − 1 ) ! (i-1)! (i1)! 提到求和之前)
g i = 1 i ! f i = 1 i ! ∑ j = 1 k ( i − 1 ) ! ( i − j ) ! f i − j = ( i − 1 ) ! i ! ∑ j = 1 k f i − j ( i − j ) ! = 1 i ∑ j = 1 k g i − j \begin{align}g_i&=\cfrac{1}{i!}f_i\\&=\cfrac{1}{i!}\sum^k_{j=1}\cfrac{(i-1)!}{(i-j)!}f_{i-j}\\&=\cfrac{(i-1)!}{i!}\sum^k_{j=1}\cfrac{f_{i-j}}{(i-j)!}\\&=\cfrac{1}{i}\sum^k_{j=1}g_{i-j}\end{align} gi=i!1fi=i!1j=1k(ij)!(i1)!fij=i!(i1)!j=1k(ij)!fij=i1j=1kgij
后面的求和部分可以在计算 g g g 的时候前缀和,预处理出 1 i \cfrac{1}{i} i1 的逆元,复杂度 O ( n ) O(n) O(n)。预处理逆元的方法:也是递推,初始 i n v 1 = 1 inv_1=1 inv1=1,递推式为: i n v i = ( ( P − ⌊ P i ⌋ ) × i n v P m o d i ) m o d P inv_i=((P-\lfloor\cfrac{P}{i}\rfloor)\times inv_{P\bmod i})\bmod P invi=((PiP⌋)×invPmodi)modP​。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn = 1e6 + 5;
int n,k;
const int P = 998244353;
ll sum[maxn],g[maxn],inv[maxn];
int main() {freopen("prison.in","r",stdin);freopen("prison.out","w",stdout);scanf("%d%d",&n,&k);inv[1] = g[1] = sum[1] = 1;for (int i = 2;i <= k;i ++)inv[i] = ((P - P / i) * inv[P % i]) % P,g[i] = 1, sum[i] = (sum[i - 1] + 1) % P;for (int i = k + 1;i <= n;i ++)inv[i] = ((P - P / i) * inv[P % i]) % P,g[i] = inv[i] * ((sum[i - 1] - sum[i - k - 1]) % P + P) % P,sum[i] = (sum[i - 1] + g[i]) % P;printf("%lld",g[n]);return 0;
}

T3 奇怪物语

Q Q Q 次询问,每次询问给定一个数 N N N,求有多少种方法,使得从 1 1 1 开始只通过 + 1 / × 2 / × 2 + 1 +1/\times 2/\times2+1 +1/×2/×2+1 三种操作若干次后能得到 N N N Q ≤ 200 Q\le 200 Q200 N ≤ 1 0 18 N\le 10^{18} N1018

错误思路

50 50 50 pts 用的递推,后面用暴搜 + 记忆化,但是没有去算 5 × 1 0 7 5\times 10^7 5×107 还开 long long 的空间复杂度,最终导致又 MLE 又 TLE……😦

正解

对于转移方程 f ( i ) = f ( ⌊ i 2 ⌋ ) + f ( i − 1 ) f(i)=f(\lfloor\cfrac{i}{2}\rfloor)+f(i-1) f(i)=f(⌊2i⌋)+f(i1),考虑使用矩阵优化(可以看看这篇博客),宗旨即为:构造一个答案矩阵和转移矩阵,通过转移矩阵的矩阵快速幂与答案矩阵相乘加速转移。对于两个矩阵:
$$
A_{n\times m}=
\begin{bmatrix}
a_{1,1}& a_{1,2}& \cdots & a_{1,m} \
a_{2,1}& a_{2,2}& \cdots & a_{2,m} \
\vdots & \vdots & \ddots & \vdots \
a_{n,1}& a_{n,2}& \cdots & a_{n,m}
\end{bmatrix}\ \ ,\ \

B_{m\times p}=
\begin{bmatrix}
b_{1,1}& b_{1,2}& \cdots & b_{1,p} \
b_{2,1}& b_{2,2}& \cdots & b_{2,p} \
\vdots & \vdots & \ddots & \vdots \
b_{m,1}& b_{m,2}& \cdots & b_{m,p}
\end{bmatrix}
$$
对他们进行矩阵乘法运算得到 C n × p C_{n\times p} Cn×p(可见,矩阵乘法得到的答案矩阵长宽与 A , B A,B A,B 的顺序有关,故矩阵乘法不具有交换律,但是有结合律,所以能用快速幂加速): C ( i , j ) = ∑ k = 1 m A ( i , k ) × B ( k , j ) C(i,j)=\sum^m_{k=1}A(i,k)\times B(k,j) C(i,j)=k=1mA(i,k)×B(k,j)​。

以一个经典的题目为例:

求斐波那契数列的第 n n n F ( n ) F(n) F(n) n ≤ 1 0 18 n\le 10^{18} n1018

对于此题,我们维护的答案矩阵即为:
A n s ( n ) = [ F ( n − 1 ) F ( n − 2 ) ] Ans(n)=\begin{bmatrix}F(n-1)&F(n-2)\end{bmatrix} Ans(n)=[F(n1)F(n2)]
当然也可以竖过来写,效果几乎相同,转移矩阵即为:
M = [ 1 1 1 0 ] M=\begin{bmatrix}1&1\\1&0\end{bmatrix} M=[1110]
F ( 1 ) = F ( 2 ) = 1 F(1)=F(2)=1 F(1)=F(2)=1,所以 A n s ( 3 ) = [ 1 1 ] Ans(3)=\begin{bmatrix}1&1\end{bmatrix} Ans(3)=[11],要求的 F ( n ) F(n) F(n) 即为 A n s ( 3 ) × M n − 2 Ans(3)\times M^{n-2} Ans(3)×Mn2 得到的矩阵的第一行第一列元素。可以把乘法过程写出来看看原理。而就像任何数乘上 1 1 1 都不变一样,矩阵中的 1 1 1 即为朝向右下角的对角线上全为 1 1 1、其余为 0 0 0 的正方形矩阵。

回到本题。因为
f ( i + 1 ) = f ( i ) + f ( ⌊ i + 1 2 ⌋ = f ( i ) + f ( ⌈ i 2 ⌉ ) ) f(i+1)=f(i)+f(\lfloor\cfrac{i+1}{2}\rfloor=f(i)+f(\lceil\cfrac{i}{2}\rceil)) f(i+1)=f(i)+f(⌊2i+1=f(i)+f(⌈2i⌉))
考虑维护的答案矩阵为
F ( i ) = [ f ( i ) f ( ⌈ i 2 ⌉ ) f ( ⌈ i 4 ⌉ ) ⋮ f ( 1 ) ] F(i)=\begin{bmatrix}f(i) \\f(\lceil\cfrac{i}{2}\rceil) \\f(\lceil\cfrac{i}{4}\rceil) \\\vdots \\f(1) \end{bmatrix} F(i)= f(i)f(⌈2i⌉)f(⌈4i⌉)f(1)
转移时,对于所有非负整数 k k k,满足 ⌈ i + 1 2 k ⌉ = ⌈ i 2 k ⌉ \lceil\cfrac{i+1}{2^k}\rceil=\lceil\cfrac{i}{2^k}\rceil 2ki+1=2ki ⌈ i + 1 2 k ⌉ = ⌈ i 2 k ⌉ + 1 \lceil\cfrac{i+1}{2^k}\rceil=\lceil\cfrac{i}{2^k}\rceil+1 2ki+1=2ki+1。对于前者,转移方程为 f ( ⌈ i + 1 2 k ⌉ ) = f ( ⌈ i 2 k ⌉ ) f(\lceil\cfrac{i+1}{2^k}\rceil)=f(\lceil\cfrac{i}{2^k}\rceil) f(⌈2ki+1⌉)=f(⌈2ki⌉);对于后者,转移方程为 f ( ⌈ i + 1 2 k ⌉ ) = f ( ⌈ i 2 k ⌉ + 1 ) = f ( ⌈ i 2 k ⌉ ) + f ( ⌈ i 2 k + 1 ⌉ ) f(\lceil\cfrac{i+1}{2^k}\rceil)=f(\lceil\cfrac{i}{2^k}\rceil+1)=f(\lceil\cfrac{i}{2^k}\rceil)+f(\lceil\cfrac{i}{2^{k+1}}\rceil) f(⌈2ki+1⌉)=f(⌈2ki+1)=f(⌈2ki⌉)+f(⌈2k+1i⌉)。如果某个 k 0 k_0 k0 满足第一种情况,那么对于所有的 k ≥ k 0 k\ge k_0 kk0 都会满足第一种情况。所以只需考虑最小的 k 0 k_0 k0 即可,两种情况被 k 0 k_0 k0 所分割。而后一种情况成立,当且仅当 2 k 2^k 2k 能整除 i i i,等价于 i i i 的二进制下末尾的 0 0 0 的个数大于等于 k k k。于是 k 0 k_0 k0 只和 lowbit ⁡ ( i ) \operatorname{lowbit}(i) lowbit(i)​ 有关。

提一嘴:对一个竖着的只有一列的矩阵 M M M 去乘转移矩阵时,欲使转移过程中 M i + M i + 1 M_i+M_{i+1} Mi+Mi+1 即相邻两项求和,只需在转移矩阵中对应位置 ( i , i + 1 ) (i,i+1) (i,i+1) 处把 0 0 0 改成 1 1 1 即可。我们设从 F ( i ) F(i) F(i) 转移到 F ( i + 1 ) F(i+1) F(i+1) 的转移矩阵为 M ( i ) M(i) M(i),使得 F ( i + 1 ) = F ( i ) × M ( i ) F(i+1)=F(i)\times M(i) F(i+1)=F(i)×M(i),显然 M ( i ) M(i) M(i) 长宽均为 ⌈ log ⁡ i ⌉ \lceil\log i\rceil logi。同理 M ( i ) M(i) M(i) 中添 1 1 1 的位置也只和 lowbit ⁡ ( i ) \operatorname{lowbit}(i) lowbit(i) 有关。所以最终的 M M M 画出来一定长成:对角线上前一段会有 2 2 2 1 1 1,后一段会有 1 1 1 1 1 1,对应之前的两种情况。所求的 F ( n ) F(n) F(n) 即为
F ( n ) = ( ∏ i = n − 1 1 M ( i ) ) × F ( 1 ) F(n)=\Big(\prod_{i=n-1}^1M(i)\Big)\times F(1) F(n)=(i=n11M(i))×F(1)
利用树状数组的思想,找到一个 m m m 使得 2 m 2^m 2m 是小于等于 n − 1 n-1 n1 的最大 2 2 2 的整数次幂,那么
( ∏ i = n − 1 1 M ( i ) ) × F ( 1 ) = ( ∏ i = n − 1 2 m M ( i ) ) ( ( ∏ i = 2 m − 1 1 M ( i ) ) × F ( 1 ) ) = ( ∏ i = n − 2 m − 1 1 M ( i ) ) ( ( ∏ i = 2 m − 1 1 M ( i ) ) × F ( 1 ) ) \begin{align} \Big(\prod_{i=n-1}^1M(i)\Big)\times F(1)&=\Big(\prod^{2^m}_{i=n-1}M(i)\Big)\Big(\big(\prod^1_{i=2^m-1}M(i)\big)\times F(1)\Big)\\&=\Big(\prod^1_{i=n-2^m-1}M(i)\Big)\Big(\big(\prod^1_{i=2^m-1}M(i)\big)\times F(1)\Big) \end{align} (i=n11M(i))×F(1)=(i=n12mM(i))((i=2m11M(i))×F(1))=(i=n2m11M(i))((i=2m11M(i))×F(1))
这里将大于 2 m 2^m 2m 的下标都减去 2 m 2^m 2m,前后不改变 lowbit ⁡ \operatorname{lowbit} lowbit 的值,则转移矩阵也相同。最后,我们考虑预处理出每一个 M ( 2 m ) × M ( 2 m − 1 ) × ⋯ × M ( 1 ) M(2^m)\times M(2^m-1)\times\dots\times M(1) M(2m)×M(2m1)××M(1) 的值,我们设其为 P ( 2 m ) P(2^m) P(2m)。先预处理出 M ( 2 m ) M(2^m) M(2m) 的值,则
P ( 2 m ) = ( M ( 2 m − 1 − 1 ) × ⋯ × M ( 1 ) ) × M ( 2 m − 1 ) × ( M ( 2 m − 1 − 1 ) × ⋯ × M ( 1 ) ) = P ( 2 m − 1 ) × M ( 2 m − 1 ) × P ( 2 m − 1 ) \begin{align}P(2^m)&=(M(2^{m-1}-1)\times \dots \times M(1))\times M(2^{m-1})\times (M(2^{m-1}-1)\times \dots \times M(1))\\&=P(2^{m-1})\times M(2^{m-1})\times P(2^{m-1})\end{align} P(2m)=(M(2m11)××M(1))×M(2m1)×(M(2m11)××M(1))=P(2m1)×M(2m1)×P(2m1)
对于计算最终的 f ( n ) f(n) f(n),即 F ( n ) F(n) F(n) 的第一行,对于 n n n 二进制上第 i i i 位为一时, F ( n ) ← M ( 2 i ) × P ( 2 i ) × F ( n ) F(n)\gets M(2^i)\times P(2^i)\times F(n) F(n)M(2i)×P(2i)×F(n)。这个过程代替了快速幂。计算时从右往左计算(矩阵乘法的结合律),可以降低每一轮乘法的时间复杂度。

预处理 M , P M,P M,P 花去 O ( log ⁡ 4 n ) O(\log^4n) O(log4n),回答每一轮花去 O ( log ⁡ 3 n ) O(\log^3n) O(log3n),总时间复杂度 O ( log ⁡ 4 n + q log ⁡ 3 n ) O(\log^4n+q\log^3n) O(log4n+qlog3n)

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll MOD = 998244353;
const ll maxn = 1e18;
const int maxm = 60;
struct Mat { // 矩阵板子ll a[maxm + 5][maxm + 5];int n,m;Mat(int x = maxm,int y = maxm) {n = x, m = y;for (int i = 1;i <= n;i ++)for (int j = 1;j <= m;j ++)a[i][j] = 0;}void draw(int k0) {for (int i = 1;i < k0;i ++) // 相邻的求和a[i][i] = a[i][i + 1] = 1;for (int i = k0;i <= m;i ++) // 其余直接等号等过去a[i][i] = 1;}Mat operator* (const Mat &X) const {Mat res = Mat(n, X.m);for (int i = 1;i <= res.n;i ++)for (int j = 1;j <= res.m;j ++)for (int k = 1;k <= m;k ++)(res.a[i][j] += a[i][k] * X.a[k][j] % MOD) %= MOD;return res;}
} M[maxm + 5], P[maxm + 5], F;
int Q; ll n;
void init() {F = Mat(maxm,1);for (int i = 1;i <= F.n;i ++)F.a[i][1] = 1;
}
int main() {freopen("stranger.in","r",stdin);freopen("stranger.out","w",stdout);for (int i = 1;i <= maxm;i ++) // 转移矩阵M[i].draw(i + 1);for (int i = 1;i <= P[1].n;i ++) // 开始预处理累乘P[1].a[i][i] = 1ll;for (int i = 2;i <= maxm;i ++)P[i] = P[i - 1] * M[i - 1] * P[i - 1];scanf("%d",&Q);while (Q --) {scanf("%lld",&n);init();for (int i = maxm;i > 0;i --) { // 快速幂的变相写法if (((n - 1) >> (i - 1)) & 1)F = M[i] * (P[i] * F);}printf("%lld\n",F.a[1][1] % MOD);}return 0;
}

T4 东部世界

洛谷原题链接:P9535 [YsOI2023] 连通图计数

错误思路

然而并没有思路:(

正解

洛谷题解

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

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

相关文章

每日一题(PTAL2-008):最长对称子串--分类讨论+遍历

最长对称子串的长度有可能是奇数也有可能是偶数&#xff0c;因此在遍历时要同时考虑这两种情况。 #include<bits/stdc.h> using namespace std;int main() {string s;getline(cin,s);int n s.size();int res 0; // 初始化为0&#xff0c;因为空字符串也是对称的for (i…

VMware最新下载安装

1、打开浏览器 搜索VMware官网&#xff0c;点进去。如图&#xff1a; 这里有两种下载方法&#xff0c;便洁就是我这种&#xff0c;还有一种就是注册账号之后下载就完全没有必要了&#xff0c;而且基本注册不了&#xff0c;不太好注册。 2、选择"产品"第二个选项 …

leetcode热题100.杨辉三角(动态规划入门)

Problem: 118. 杨辉三角 文章目录 题目思路复杂度Code 题目 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,…

Go语言并发控制

channel // cancelFn 数据通道关闭通知退出 func cancelFn(dataChan chan int) {for {select {case val, ok : <-dataChan:// 关闭data通道时&#xff0c;通知退出// 一个可选是判断data指定值时退出if !ok {fmt.Printf("Channel closed &#xff01;&#xff01;&…

5. Django 探究CBV视图

5. 探究CBV视图 Web开发是一项无聊而且单调的工作, 特别是在视图功能编写方面更为显著. 为了减少这种痛苦, Django植入了视图类这一功能, 该功能封装了视图开发常用的代码, 无须编写大量代码即可快速完成数据视图的开发, 这种以类的形式实现响应与请求处理称为CBV(Class Base…

使用阿里云试用Elasticsearch学习:sentence-transformers 包使用

环境&#xff1a;centos8&#xff0c;windows坑太多。 一、检查linux环境openssl哪个版本&#xff08;如果是OpenSSL 1.1.1k 直接跳过&#xff09; [roothecs-334217 python39]# openssl version OpenSSL 1.0.2k-fips 26 Jan 2017原因后续会出麻烦&#xff0c;遇到这种情况最…

16.C++常用的算法_算数生成算法

文章目录 遍历算法1. accumulate()代码工程运行结果 2. fill()代码工程运行结果 遍历算法 1. accumulate() 代码工程 第三个参数为累加的起始值&#xff0c;如果没有特殊需求写0即可; 需要注意包含头文件#include<numeric>#define _CRT_SECURE_NO_WARNINGS #include&l…

【C语言】Dijkstra算法详解

一、引言二、Dijkstra算法原理三、Dijkstra算法的C语言实现四、Dijkstra算法的应用场景五、总结 一、引言 Dijkstra算法是一种著名的图论算法&#xff0c;用于解决单源最短路径问题。它是由荷兰计算机科学家Edsger W. Dijkstra在1956年提出的。本文将详细介绍Dijkstra算法的原理…

代码随想录:二叉树11-12

目录 222.完全二叉树的节点个数 题目 代码&#xff08;层序迭代&#xff09; 代码&#xff08;后序递归&#xff09; 代码&#xff08;满二次树递归&#xff09; 总结 110.平衡二叉树 题目 代码&#xff08;后序递归&#xff09; 代码&#xff08;层序迭代&#xff0…

短视频批量采集提取软件|视频关键词下载工具

短视频批量采集软件&#xff1a;快速抓取、高效下载 一、开发背景 随着短视频平台的兴起&#xff0c;获取并分析相关视频内容已成为许多业务的必要步骤。然而&#xff0c;传统的手动方式无法满足快速、批量获取的需求&#xff0c;因此我们开发了一款专业的短视频批量采集软件。…

Linux内核之读、写信号量:up_read、up_write用法实例(五十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

ASP.NET基于WEB的工作计划流程管理系统的设计与实现

摘 要 信息技术的飞速发展&#xff0c;尤其是网络通讯技术、数据库技术及自动化技术的日新月异&#xff0c;为单位、企业的办公带来了极大的便利。但是由于单位、企业的工作性质众多&#xff0c;工作流程各有差异&#xff0c;企业、单位、部门之间的管理机制各不相同&#xf…

用队列实现栈(力扣第225题)

#include "stdio.h" #include "stdbool.h" #include "string.h" #include "stdlib.h" #include "assert.h"//初始化队列 typedef int QueueDataType;typedef struct queue {QueueDataType val;struct queue* next; }Qnode;t…

微信小程序地图polyline坐标太多异常显示BUG

描述 微信小程序map地图上显示polyline线&#xff0c;点位超过1250个出现bug&#xff0c;&#xff08;仅真机上出现&#xff0c;模拟器上正常&#xff09; 这里以加载四川省边界为例, 以下是示例代码 // 读取geojson数据 uni.request({url: https://geo.datav.aliyun.com/a…

openplc Linux 使用modbus RTU 从机通讯

1.Linux 环境下&#xff0c;openplc 默认使用的是modbus tcp协议通信。 想要使用串口 modbus rtu 通讯可以通过在runtime中添加SlaveDevices从机设备 2.添加设备&#xff0c;分配地址。 左边添加串口配置&#xff0c;右边是需要通讯的地址&#xff0c;从机地址都是从100开始&am…

yolov8 区域计数

yolov8 区域计数 1. 基础2. 计数功能2.1 计数模块2.2 判断模块 3. 主代码4. 实验结果5. 源码 1. 基础 本项目是在 WindowsYOLOV8环境配置 的基础上实现的&#xff0c;测距原理可见上边文章 2. 计数功能 2.1 计数模块 在指定区域内计数模块 def count_objects_in_region(bo…

STM32 堆栈内存以及变量存储分布

STM32的程序存储器、数据存储器、寄存器和输入输出端口被组织在同一个4GB的线性地址空间内, 地址范围为0x0000 0000至0xFFFF FFFF。其中FLASH为ROM类型&#xff0c;储存的数据掉电不易失&#xff1b;RAM中存储的数据掉电易失。以STM32F103系列为例&#xff0c;最多有512KB的FLA…

Discuz! X3.4 升级至 Discuz! X3.5 详细教程

第一步&#xff1a;从其他以前的 Discuz! X 版本升级Discuz! X3.4 请先升级到Discuz! X3.4&#xff0c;升级教程网上比较普遍&#xff0c;在此不再论述。 第二步&#xff1a;Discuz! X3.4 升级至 Discuz! X3.5 &#xff08;Discuz 从 X3.5 以后&#xff0c;不在发布GBK版本&…

【软考】UML中的图之类图

目录 1. 说明2. 图示3. 类图使用方式3.1 对系统的词汇建模3.2 对简单的协作建模3.3 对逻辑数据库模式建模 1. 说明 1.类图&#xff08;Class Diagram&#xff09;展现了一组对象、接口、协作和它们之间的关系。2.在面向对象系统的建模中所建立的最常见的图是类图。3.类图给出系…

离线数仓数据导出-hive数据同步到mysql

离线数仓数据导出-hive数据同步到mysql MySQL建库建表数据导出 为方便报表应用使用数据&#xff0c;需将ads各指标的统计结果导出到MySQL数据库中。 datax支持hive同步MySQL&#xff1a;仅仅支持hive存储的hdfs文件导出。所以reader选hdfs-reader&#xff0c;writer选mysql-wri…