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…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
