CSP-S 2024 提高级 第一轮(初赛) 阅读程序(3)
【题目】
CSP-S 2024 提高级 第一轮(初赛) 阅读程序(3)
1 #include <iostream>
2 #include <cstring>
3 #include <algorithm>
4 using namespace std;
5
6 const int maxn = 1000000 + 5;
7 const int P1 = 998244353, P2 = 1000000007;
8 const int B1 = 2, B2 = 31;
9 const int K1 = 0, K2 = 13;
10
11 typedef long long ll;
12
13 int n;
14 bool p[maxn];
15 int p1[maxn], p2[maxn];
16
17 struct H {
18 int h1, h2, l;
19 H(bool b = false) {
20 h1 = b + K1;
21 h2 = b + K2;
22 l = 1;
23 }
24 H operator + (const H &h) const {
25 H hh;
26 hh.l = l + h.l;
27 hh.h1 = (1ll * h1 * p1[h.l] + h.h1) % P1;
28 hh.h2 = (1ll * h2 * p2[h.l] + h.h2) % P2;
29 return hh;
30 }
31 bool operator == (const H &h)const {
32 return l == h.l && h1 == h.h1 && h2 == h.h2;
33 }
34 bool operator < (const H &h)const {
35 if (l != h.l)return l < h.l;
36 else if (h1 != h.h1)return h1 < h.h1;
37 else return h2 < h.h2;
38 }
39 } h[maxn];
40
41 void init() {
42 memset(p, 1, sizeof(p));
43 p[0] = p[1] = false;
44 p1[0] = p2[0] = 1;
45 for (int i = 1; i <= n; i++) {
46 p1[i] = (1ll * B1 * p1[i - 1]) % P1;
47 p2[i] = (1ll * B2 * p2[i - 1]) % P2;
48 if (!p[i])continue;
49 for (int j = 2 * i; j <= n; j += i) {
50 p[j] = false;
51 }
52 }
53 }
54
55 int solve() {
56 for (int i = n; i; i--) {
57 h[i] = H(p[i]);
58 if (2 * i + 1 <= n) {
59 h[i] = h[2 * i] + h[i] + h[2 * i + 1];
60 } else if (2 * i <= n) {
61 h[i] = h[2 * i] + h[i];
62 }
63 }
64 cout << h[1].h1 << endl;
65 sort(h + 1, h + n + 1);
66 int m = unique(h + 1, h + n + 1) - (h + 1);
67 return m;
68 }
69
70 int main() {
71 cin >> n;
72 init();
73 cout << solve() << endl;
74 }
判断题
1. 假设程序运行前能自动将 maxn改为 n+1,所实现的算法的时间复杂度是 O(nlogn)。
2. 时间开销的瓶颈是 init()函数
3. 若修改常数 B1 或 K1 的值,该程序可能会输出不同的结果
单选题
4. 在 solve()函数中,h[]的合并顺序可以看作是:( )
A. 二叉树的 BFS 序
B. 二叉树的先序遍历
C. 二叉树的中序遍历
D. 二叉树的后序遍历
5. 输入“10”,输出的第一行是?( )
A.83
B.424
C.54
D.110101000
6. (4 分)输入“16”,输出的第二行是?( )
A.7
B.9
C.10
D.12
【题目考点】
1. 字符串哈希
设一个串为 s = c 0 c 1 . . . c n − 1 s=c_0c_1...c_{n-1} s=c0c1...cn−1,设基数为B,该串的哈希值为:
H ( s ) = c 0 B n − 1 + c 1 B n − 2 + . . . + c n − 1 B 0 H(s)=c_0B^{n-1}+c_1B^{n-2}+...+c_{n-1}B^0 H(s)=c0Bn−1+c1Bn−2+...+cn−1B0
2. 二叉树:顺序存储结构
使用数组保存完全二叉树,下标i位置表示的结点的左孩子在 2 i 2i 2i位置,右孩子在 2 i + 1 2i+1 2i+1位置,双亲在 ⌊ i 2 ⌋ \lfloor \frac{i}{2} \rfloor ⌊2i⌋位置
3. 埃拉托色尼筛法
4. C++ STL
- sort函数
sort(lb, ub, cmp)
lb为序列的下界,ub为序列的上界,下界与上界的类型为指针或迭代器,表示左闭右开区间[lb, ub)。
cmp为比较规则,可以传入函数,指定元素的排序规则。如不传cmp参数,则默认的比较函数为less仿函数,其实现大体为:
<template class T>
struct less
{bool operator () (const T &a, const T &b){return a < b;}
}
其意义为:如果a<b为真,那么a应该排在b的前面。
因此只要该T类型元素重载了小于号运算符,即可使用less仿函数,也就是可以直接使用sort进行排序且不需要传入比较函数。
2. unique函数
rb = unique(lb, ub)
lb为序列的下界,ub为序列的上界,下界与上界的类型为指针或迭代器,表示左闭右开区间[lb, ub)。
unique的作用是将序列的左闭右开区间[lb, ub)中的相邻的重复元素只保留一个。如果[lb, ub)区间中的元素是有序的,那么该函数可以完成去重。
函数返回值为rb,表示去重后剩下的元素在区间[lb, rb)中,去重后剩下元素的个数为rb-lb。
【解题思路】
41 void init() {
42 memset(p, 1, sizeof(p));
43 p[0] = p[1] = false;
44 p1[0] = p2[0] = 1;
45 for (int i = 1; i <= n; i++) {
46 p1[i] = (1ll * B1 * p1[i - 1]) % P1;
47 p2[i] = (1ll * B2 * p2[i - 1]) % P2;
48 if (!p[i])continue;
49 for (int j = 2 * i; j <= n; j += i) {
50 p[j] = false;
51 }
52 }
53 }
看init函数,如果只看p数组相关操作,可以看出这是在进行埃筛,结果是p数组,p[i]
表示数值i是否是质数。
对于p1、p2,是预处理幂,根据递推式可知:
p1[i]
表示 B 1 i % P 1 B_1^i\%P_1 B1i%P1,p2[i]
表示 B 2 i % P 2 B_2^i\%P_2 B2i%P2
17 struct H {
18 int h1, h2, l;
19 H(bool b = false) {
20 h1 = b + K1;
21 h2 = b + K2;
22 l = 1;
23 }
24 H operator + (const H &h) const {
25 H hh;
26 hh.l = l + h.l;
27 hh.h1 = (1ll * h1 * p1[h.l] + h.h1) % P1;
28 hh.h2 = (1ll * h2 * p2[h.l] + h.h2) % P2;
29 return hh;
30 }
31 bool operator == (const H &h)const {
32 return l == h.l && h1 == h.h1 && h2 == h.h2;
33 }
34 bool operator < (const H &h)const {
35 if (l != h.l)return l < h.l;
36 else if (h1 != h.h1)return h1 < h.h1;
37 else return h2 < h.h2;
38 }
39 } h[maxn];
看H类,大体上是用到了双哈希的算法。H表示一个串,l是这个串的长度,h1、h2是该串在不同基数下的哈希值。
19 H(bool b = false) {
20 h1 = b + K1;
21 h2 = b + K2;
22 l = 1;
23 }
设一个串为 s = c 0 c 1 . . . c n − 1 s=c_0c_1...c_{n-1} s=c0c1...cn−1,设基数为B,该串的哈希值为:
H ( s ) = ( c 0 B n − 1 + c 1 B n − 2 + . . . + c n − 1 B 0 ) m o d P H(s)=(c_0B^{n-1}+c_1B^{n-2}+...+c_{n-1}B^0) \mod P H(s)=(c0Bn−1+c1Bn−2+...+cn−1B0)modP(为方便表示,以下叙述中省略 m o d P \mod P modP)
根据构造函数可以看出,该问题的串是由bool类型组成的,也可以视为一个01串。
构造函数中,l为1,串中只有一个元素。
当b为true,也就是串s="1"时,哈希值 h 1 = 1 + K 1 = 1 h_1=1+K_1=1 h1=1+K1=1, h 2 = 1 + K 2 = 14 h_2=1+K_2=14 h2=1+K2=14
当b为false,也就是串s="0"时,哈希值 h 1 = K 1 = 0 h_1=K_1=0 h1=K1=0, h 2 = K 2 = 13 h_2=K_2=13 h2=K2=13
当串长度l为1时, H ( s ) = c 0 B 1 − 1 = c 0 H(s)=c_0B^{1-1}=c_0 H(s)=c0B1−1=c0,该哈希值就是这一位0或1所代表的值 c i c_i ci
因此在基数为 B 1 = 2 B1=2 B1=2时,01串中每位0对应的值 c i c_i ci为0,每位1对应的值 c i c_i ci为1。
在基数为 B 2 = 31 B2=31 B2=31时,01串中每位0对应的值 c i c_i ci为13,每位1对应的值 c i c_i ci为14。
24 H operator + (const H &h) const {
25 H hh;
26 hh.l = l + h.l;
27 hh.h1 = (1ll * h1 * p1[h.l] + h.h1) % P1;
28 hh.h2 = (1ll * h2 * p2[h.l] + h.h2) % P2;
29 return hh;
30 }
重载+运算符,其作用是将两个串连接为一个新串,返回新串的长度及哈希值。
设x、y都是H类型的对象,存在表达式z = x+y
。
那么在该成员函数中,x对象是*this
,x的属性是h1, h2, l
,在以下解释中记为 x h 1 x h 2 x l xh_1\ xh_2\ xl xh1 xh2 xl。
y是传入的参数h
,属性为h.h1, h.h2, h.l
,在以下解释中记为 y h 1 y h 2 y l yh_1\ yh_2\ yl yh1 yh2 yl。
结果z为hh
,其属性为 z h 1 z h 2 z l zh_1\ zh_2\ zl zh1 zh2 zl。
设x表示的串为 c 0 c 1 . . . c x l − 1 c_0c_1...c_{xl-1} c0c1...cxl−1,y表示的串为 c 0 ′ c 1 ′ . . . c y l − 1 ′ c'_0c'_1...c'_{yl-1} c0′c1′...cyl−1′
z表示的串为 c 0 c 1 . . . c x l − 1 c 0 ′ c 1 ′ . . . c y l − 1 ′ c_0c_1...c_{xl-1}c'_0c'_1...c'_{yl-1} c0c1...cxl−1c0′c1′...cyl−1′
首先二者连接后的串z的长度为x、y两个串的长度加和 z l = x l + y l zl=xl+yl zl=xl+yl。
而后求串z在基数为B1时的哈希值。
x h 1 = c 0 B 1 x l − 1 + c 1 B 1 x l − 2 + . . . + c x l − 1 B 1 0 xh_1=c_0B_1^{xl-1}+c_1B_1^{xl-2}+...+c_{xl-1}B_1^0 xh1=c0B1xl−1+c1B1xl−2+...+cxl−1B10
y h 1 = c 0 ′ B 1 y l − 1 + c 1 ′ B 1 y l − 2 + . . . + c y l − 1 ′ B 1 0 yh_1=c'_0B_1^{yl-1}+c'_1B_1^{yl-2}+...+c'_{yl-1}B_1^0 yh1=c0′B1yl−1+c1′B1yl−2+...+cyl−1′B10
z h 1 = c 0 B 1 x l + y l − 1 + c 1 B 1 x l + y l − 2 + . . . + c x l − 1 B 1 y l + c 0 ′ B 1 y l − 1 + c 1 ′ B 1 y l − 2 + . . . + c y l − 1 ′ B 1 0 zh_1=c_0B_1^{xl+yl-1}+c_1B_1^{xl+yl-2}+...+c_{xl-1}B_1^{yl}+c'_0B_1^{yl-1}+c'_1B_1^{yl-2}+...+c'_{yl-1}B_1^0 zh1=c0B1xl+yl−1+c1B1xl+yl−2+...+cxl−1B1yl+c0′B1yl−1+c1′B1yl−2+...+cyl−1′B10
= B 1 x l ( c 0 B 1 x l − 1 + c 1 B 1 x l − 2 + . . . + c x l − 1 B 1 0 ) + ( c 0 ′ B 1 y l − 1 + c 1 ′ B 1 y l − 2 + . . . + c y l − 1 ′ B 1 0 ) =B_1^{xl}(c_0B_1^{xl-1}+c_1B_1^{xl-2}+...+c_{xl-1}B_1^0)+(c'_0B_1^{yl-1}+c'_1B_1^{yl-2}+...+c'_{yl-1}B_1^0) =B1xl(c0B1xl−1+c1B1xl−2+...+cxl−1B10)+(c0′B1yl−1+c1′B1yl−2+...+cyl−1′B10)
= B 1 x l x h 1 + y h 1 =B_1^{xl}xh_1+yh_1 =B1xlxh1+yh1
这就是代码hh.h1 = (1ll * h1 * p1[h.l] + h.h1) % P1
的原理,其中p1[h.l]
就是 B 1 x l B_1^{xl} B1xl。
同理有: z h 2 = B 2 x l x h 2 + y h 2 zh_2=B_2^{xl}xh_2+yh_2 zh2=B2xlxh2+yh2
31 bool operator == (const H &h)const {
32 return l == h.l && h1 == h.h1 && h2 == h.h2;
33 }
34 bool operator < (const H &h)const {
35 if (l != h.l)return l < h.l;
36 else if (h1 != h.h1)return h1 < h.h1;
37 else return h2 < h.h2;
38 }
重载==运算符,判断规则为:两个H类对象表示的串的长度以及两种哈希值都对应相等时,认定两个H类对象相等。注意,如果两个元素表示的01串不同,但它们的两种哈希值都分别相同,即发生哈希冲突,此时也认为二者相等。
重载<运算符,先比较串的长度,再比哈希值h1,再比哈希值h2。如果某一项不相等,直接返回比较结果。
55 int solve() {
56 for (int i = n; i; i--) {
57 h[i] = H(p[i]);
58 if (2 * i + 1 <= n) {
59 h[i] = h[2 * i] + h[i] + h[2 * i + 1];
60 } else if (2 * i <= n) {
61 h[i] = h[2 * i] + h[i];
62 }
63 }
64 cout << h[1].h1 << endl;
65 sort(h + 1, h + n + 1);
66 int m = unique(h + 1, h + n + 1) - (h + 1);
67 return m;
68 }
solve函数中,i从n到1循环,将h[i]的哈希值设为H(p[i]),可以理解为生成一个长为1的串,如果p[i]为true,串就是"1";如果p[i]为false,串就是"0"。h[i]中保存的就是该串的长度,以及在两种基数下的哈希值。
将h数组视为顺序存储结构的二叉树,h[i]
的左孩子是h[2*i]
,右孩子是h[2*i+1]
,如果第i位置表示的结点存在孩子,其孩子的下标不能超过n。
因此判断if(2*i+1 <= n)
就是判断“如果i有右孩子”,h[i] = h[2 * i] + h[i] + h[2 * i + 1]
就是将第i结点左孩子h[2*i]
表示的串接上h[i]
表示的串再接上h[2*i+1]
表示的串,将拼接起来的新的字符串的长度以及两种哈希值保存在h[i]
。
else if (2*i <= n)
就是判断如果i没有右孩子,只有左孩子,那么h[i] = h[2 * i] + h[i]
将第i结点的左孩子h[2*i]
表示的串和h[i]
表示的串前后连接作为新的串。新的串的长度和哈希值保存在h[i]
。
最后输出根结点h[1]
基数为B1时的哈希值
将h[1]~h[n]按照重载<指定的比较规则进行升序排序。
而后将h[1]~h[n]去重,调用unique函数进行去重时,函数内部使用了H类的==运算符,来判断两个H类对象是否相等。unique的返回值减去上界h+1即为去重后的元素个数,返回该值。(见【题目考点】4)
主函数中就是调用solve,输出其返回值。
【试题答案及解析】
判断题
1. 假设程序运行前能自动将 maxn改为 n+1,所实现的算法的时间复杂度是 O(nlogn)。
答:T
如果使用动态内存申请的方法,就可以使数组长度始终为n+1。
55 int solve() {
56 for (int i = n; i; i--) {
57 h[i] = H(p[i]);
58 if (2 * i + 1 <= n) {
59 h[i] = h[2 * i] + h[i] + h[2 * i + 1];
60 } else if (2 * i <= n) {
61 h[i] = h[2 * i] + h[i];
62 }
63 }
64 cout << h[1].h1 << endl;
65 sort(h + 1, h + n + 1);
66 int m = unique(h + 1, h + n + 1) - (h + 1);
67 return m;
68 }
观察solve函数,i从n循环到1,循环内无论是H类对象的构造函数,还是H类对象的+运算,都是O(1)复杂度。因此该循环的复杂度是 O ( n ) O(n) O(n)
unique的复杂度是 O ( n ) O(n) O(n),sort函数的复杂度是 O ( n l o g n ) O(nlogn) O(nlogn),因此solve函数的时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn)
init函数就是埃筛的过程,复杂度是 O ( n l o g l o g n ) O(nloglogn) O(nloglogn)
因此该算法整体的时间复杂度是 O ( n l o g n + n l o g l o g n ) = O ( n l o g n ) O(nlogn+nloglogn)=O(nlogn) O(nlogn+nloglogn)=O(nlogn),该叙述正确。
2. 时间开销的瓶颈是 init()函数
答:F
根据第1题的分析,可知solve函数的复杂度比init函数更高,因此时间开销的瓶颈是solve函数,更准确地说是sort函数。
3. 若修改常数 B1 或 K1 的值,该程序可能会输出不同的结果
答:T
根结点的01串是固定的,但B1及K1决定了该串的h1哈希值。该题最后要输出根结点表示的串的h1哈希值,因此改变B1或K1的值后,可能会使结果不同。
单选题
4. 在 solve()函数中,h[]的合并顺序可以看作是:( )
A. 二叉树的 BFS 序
B. 二叉树的先序遍历
C. 二叉树的中序遍历
D. 二叉树的后序遍历
答:C
如果i有右孩子,执行h[i] = h[2 * i] + h[i] + h[2 * i + 1]
是左孩子表示的串 连接 根结点表示的串 连接右孩子表示的串。
如果i没有右孩子,只有左孩子,执行h[i] = h[2 * i] + h[i]
是左孩子表示的串 连接 根结点表示的串。
都满足左、根、右的顺序,这是二叉树的中序遍历顺序。
5. 输入“10”,输出的第一行是?( )
A.83
B.424
C.54
D.110101000
答:A
n=10,只考虑i从1~10这10个数字是否为质数。
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
p[i] | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
根据该题的规则建树
结点中x:s 表示x号结点表示的串为s
根结点的串为0001010011,串中元素为0时 c i = K 1 = 0 c_i=K_1=0 ci=K1=0,串中元素为1时 c i = K 1 + 1 = 1 c_i=K_1+1=1 ci=K1+1=1。
哈希值计算公式为 H ( s ) = ( c 0 B n − 1 + c 1 B n − 2 + . . . + c n − 1 B 0 ) m o d P H(s)=(c_0B^{n-1}+c_1B^{n-2}+...+c_{n-1}B^0) \mod P H(s)=(c0Bn−1+c1Bn−2+...+cn−1B0)modP
n为串s的长度,该题中为10。B为 B 1 = 2 B_1=2 B1=2,P为 P 1 = 998244353 P_1=998244353 P1=998244353
H ( s ) = 0 ∗ 2 9 + 0 ∗ 2 8 + 0 ∗ 2 7 + 1 ∗ 2 6 + 0 ∗ 2 5 + 1 ∗ 2 4 + 0 ∗ 2 3 + 0 ∗ 2 2 + 1 ∗ 2 1 + 1 ∗ 2 0 = 2 6 + 2 4 + 2 1 + 2 0 = 83 H(s)=0*2^9+0*2^8+0*2^7+1*2^6+0*2^5+1*2^4+0*2^3+0*2^2+1*2^1+1*2^0=2^6+2^4+2^1+2^0=83 H(s)=0∗29+0∗28+0∗27+1∗26+0∗25+1∗24+0∗23+0∗22+1∗21+1∗20=26+24+21+20=83,选A。
6. (4 分)输入“16”,输出的第二行是?( )
A.7
B.9
C.10
D.12
答:C
根据要求建树
基数为B1和基数为B2的哈希过程对于0、1对应的值 c i c_i ci的认定是不同的,两个基数也不同,不同串经过两种哈希过程得到相同哈希值都相等的概率很小,我们可以认为不会出现哈希冲突。在这样的认识下,只要两个串不同,二者的哈希值就是不同的。那么经过去重操作后得到的结果m是:h[1]~h[16]中也就是树中所有结点所表示的不同的串的数量。
有:
0, 1, 00, 001, 010, 011, 0000, 00001011, 0011010, 0000101100011010。共10种串,选C。
相关文章:

CSP-S 2024 提高级 第一轮(初赛) 阅读程序(3)
【题目】 CSP-S 2024 提高级 第一轮(初赛) 阅读程序(3) 1 #include <iostream> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 6 const int maxn 1000000 5; 7 const int P1 998…...

如何在 Rust 中通过 Rumqttc 实现 MQTT 通信
Rust 简介 Rust 是一门系统级编程语言,以其卓越的性能、并发能力以及内存安全特性著称。Rust 由 Mozilla 推出,目标是在现代软件开发中提供一种安全高效的编程语言。其设计旨在提供安全、并发和高效的编程体验,同时保持开发效率和代码质量不…...

广东高校建设AIGC实验室时需要注意哪几个关键点?
随着人工智能技术的飞速发展,特别是生成式人工智能(AIGC)在各行各业中的广泛应用,它已经成为推动新一轮科技革命和产业变革的关键力量。教育部等相关部门近年来也高度重视人工智能领域的人才培养工作,强调要加快推动高…...

设计模式-PIMPL 模式
PIMPL(Pointer to IMPLementation),又称Opaque Pointer模式或编译防火墙,是一种在C中广泛应用的编程技术。其核心思想是将类的实现细节从公共接口中分离出来,通过指向实现类的指针来访问类的具体功能。这种模式在提高代…...

Docker部署MongoDB教程
嘿,大家好!今天我在三丰云免费服务器上进行了一次激动人心的MongoDB部署测试。这款免费云服务器1核CPU、1G内存、10G硬盘、5M带宽,是不错的免费服务器选择。 首先,让我们简要介绍一下使用到的Docker和MongoDB软件。Docker是一个开…...

堆排序易错点
1.建堆和调整堆(插入和删除) 建堆和调整堆的过程是不一样的: 建堆 从非终端节点编号的结点开始依次建立大根堆,例如: 拿第2个图说,首先比较-1,7,从中选一个小的,即“-1”…...

安卓13长按电源按键直接关机 andriod13不显示关机对话框直接关机
总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析4.代码修改5.编译6.彩蛋1.前言 有些设备需要在长按电源键的时候,直接关机。不需要弹出对话框进行询问。 2.问题分析 过滤电源按键,需要在系统里面处理的话,那么我们需要熟悉android的事件分发,然后再…...

React学习笔记(四)——React 组件生命周期
目录 1. 生命周期-概览 2. 生命周期-挂载阶段 3. 生命周期-更新阶段 4. 生命周期-卸载阶段 5. setState扩展-发现问题 6. setState扩展-更多用法 7. setState扩展-异步 1. 生命周期-概览 了解react类组件生命周期整体情况 大致步骤: 什么是生命周期React类组…...

PHP的guzzlehttp/guzzle库在碰到各种异常时的场景
PHP的guzzlehttp/guzzle库在碰到各种异常时的场景 结论: 经过测试得知 在http状态码为1xx, 2xx, 3xx时, 会在111处输出返回 在http状态码为4xx, 5xx时, 会在222处被捕获 在目标服务不可达或其他异常时会在333处被捕获 测试过程: 用其他程序写个接口, 实现输入什么状态码就返…...

多机部署,负载均衡-LoadBalance
文章目录 多机部署,负载均衡-LoadBalance1. 开启多个服务2. 什么是负载均衡负载均衡的实现客户端负载均衡 3. Spring Cloud LoadBalance快速上手使用Spring Cloud LoadBalance实现负载均衡修改IP,端口号为服务名称启动多个服务 负载均衡策略自定义负载均衡策略 LoadBalance原理…...

Hadoop安装与配置
一、Hadoop安装与配置 1、解压Hadoop安装包 找到hadoop-2.6.0.tar.gz,将其复到master0节点的”/home/csu”目录内,解压hadoop [csumaster0 ~]$ tar -zxvf ~/hadoop-2.6.0.tar.gz 解压成成功后自动在csu目录下创建hadoop-2.6.0子目录,可以用cd hadoo…...

一个自制的比较low的刷题软件
一个自制的比较low的刷题软件 一、背景 工作中往往涉及一些考试,比如阿里云ACP认证,华为GAUSS认证、软考等,应对这些考试的时候,我们往往是先看书后刷题(当然也有直接刷题的大神,毕竟考试,懂的…...

【Java 集合】List接口 —— ArrayList 与 LinkedList 详解
List接口继承自Collection接口,是单列集合的一个重要分支。 在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引(类似于数组中的元素角标)来访问集合中的指定元素。另外&…...

通信工程学习:什么是PNF物理网络功能
PNF:物理网络功能 PNF(Physical Network Function)即物理网络功能,是指支持网络功能的物理设备。以下是关于PNF的详细解释: 一、定义与特点 定义: PNF是网络设备厂商(如Cisco、华为、H3C等)通过专用硬件实体提供软件功能的设备。这些设备直接在物理服务器上运…...

Unity的Text组件中实现输入内容的渐变色效果
要在Unity的Text组件中实现输入内容的渐变色效果,默认的Text组件不直接支持渐变色。但是,你可以通过以下几种方式实现: ### 1. **使用Shader**来实现渐变效果 通过自定义Shader为Text组件创建一个渐变效果。这是一个常用的做法࿰…...

network-scripts目录下没有ens33文件的问题
作者:程序那点事儿 日期:2023/11/09 06:52 systemctl start NetworkManager #开启网络管理器nmcli con show #查看ens33网卡对应的是ifcfg-Wired_connection_3这个文件(网络管理器要开启,不然报错),或者根据…...

OpenHarmony(鸿蒙南向)——平台驱动指南【DAC】
往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ 持续更新中…… 概述 功能简介 DAC(Digital to Analog Converter&…...

10.Lab Nine —— file system-下
Symbolic links 添加符号链接 1.添加有关symlink系统调用的定义声明,包括kernel/syscall.h, kernel/syscall.c, user/usys.pl 和 user/user.h. 2.添加新的文件类型T_SYMLINK到kernel/stat.h中,添加新的文件标识位O_NOFOLLOW到kernel/fcntl.h中 3.在ken…...

低代码中实现数据映射的必要性与方案
在数字化转型的浪潮中,低代码平台因其快速开发和灵活性而受到越来越多企业的青睐。然而,随着业务需求的复杂化,单纯依赖低代码工具往往难以满足企业在数据处理和业务逻辑上的要求。数据映射作为连接不同数据源和业务逻辑的桥梁,显…...

SpringBoot集成阿里easyexcel(一)基础导入导出
easyexcel主要用于excel文件的读写,可使用model实体类来定义文件读写的模板,对开发人员来说实现简单Excel文件的读写很便捷。可参考官方文档 https://github.com/alibaba/easyexcel 一、引入依赖 <!-- 阿里开源EXCEL --><dependency><gr…...

四元组问题
目录 问题描述 输入格式 输出格式 样例输入 样例输出 说明 评测数据规模 运行限制 原题链接 代码思路 问题描述 从小学开始,小明就是一个非常喜欢数学的孩子。他喜欢用数学的方式解决各种问题。在他的高中时期,他遇到了一个非常有趣的问题&…...

如何用Prometheus监控禁用了Actuator的SpringBoot?
需求来源 prometheus监控微服务一般都是使用micrometer结合actuator来做: 添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency> <d…...

使用TensorFlow实现一个简单的神经网络:从入门到精通
使用TensorFlow实现一个简单的神经网络:从入门到精通 在现代数据科学和机器学习领域,神经网络是一个非常重要的工具。TensorFlow 是一个开源的深度学习框架,由 Google 开发和维护,它使得构建和训练神经网络变得更加容易。本文将详细介绍如何使用 TensorFlow 实现一个简单的…...

应用DFX能力介绍
一、HarmonyOS生态DFX能力范围 围绕开发者,构建三方应用和设备从开发到维护全生命周期所必需、有竞争力、有特色的调试调优、定位、维护能力。 二、HarmonyOS DFX能力全集 三、DFX设计主要范围 1、HiLog 日志分类 日志常用命令 日志级别 日志规则 2、HiAppEvent 完…...

第三篇 第20章工程计价数字化与智能化
第三篇 工程计价 第20章 工程计价数字化与智能化 20.1 BIM在工程计价中的应用 20.1.1 BIM概述 1.定义 在建设工程及设施全生命周期内,对其物理特征和功能特征信息进行数字化表达,依次设计、施工、运营的过程和结果的总称。应由核心层、共享层、专业领域层、资源层四个概念层…...

成语700词(46~65组)
目录 46.熟悉、了解、知晓相关(15 个)47.很常见不奇怪(6 个)48.看法一致与否(10 个)49.从细节看全貌(10 个)50.看事情透彻(11 个)51.对事情的态度与评价(7 个)52.数量多与少(11 个)53.建筑相关(6 个)54.相同与不同(17 个)55.技艺精湛(10 个)56.与观看欣赏相…...

linux如何配置静态IP
文章目录 使用ip命令(临时配置)Debian/Ubuntu系统(使用netplan)CentOS/RHEL系统(使用nmcli或nmtui)使用nmcli(命令行界面)使用nmtui(文本用户界面)通过图形界…...

Dependency Check:一款针对应用程序依赖组件的安全检测工具
关于Dependency Check Dependency-Check 是一款软件组合分析 (SCA) 工具,可尝试检测项目依赖项中包含的公开披露的漏洞。它通过确定给定依赖项是否存在通用平台枚举 (CPE) 标识符来实现此目的。如果找到,它…...

Python 从入门到实战28(文件的读操作)
我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们讨论了文件的打开、创建、关闭的相关知识。今天我们将…...

[leetcode刷题]面试经典150题之7同构字符串(简单)
这个题虽然是简单题,但是看了半天还是没啥好思路,最后看了解题学到了不少知识点 1.index() 函数查找序列中首次出现的元素索引 2.zip函数:用于将可迭代的对象(如列表、元组、字典等)作为参数,将对象中对应…...