<蓝桥杯软件赛>零基础备赛20周--第6周--数组和队列

报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集
20周的完整安排请点击:20周计划
每周发1个博客,共20周(读者可以按自己的进度选“正常”和“快进”两种计划)。
每周3次集中答疑
,周三、周五、周日晚上,在QQ群上答疑:

在这里插入图片描述

文章目录

  • 1. 数组的应用--高精度
    • 1.1 Java和Python计算大数
    • 1.2 C/C++高精度计算大数
      • 1.2.1 高精度加法
      • 1.2.2 高精度减法
      • 1.2.3 高精度乘法
      • 1.2.4 高精度除法
  • 2. 队列
    • 2.1 手写队列
      • 2.1.1 C/C++手写队列
      • 2.1.2 Java手写队列
      • 2.1.3 Python手写队列
    • 2.2 C++ STL队列queue
    • 2.3 Java队列Queue
    • 2.4 Python队列Queue和deque
    • 2.5 例题
      • 2.5.1 C/C++代码
      • 2.5.2 Java代码
      • 2.5.3 Python
  • 3. 习题

第 6周:高精度、队列

1. 数组的应用–高精度

  高精度算法就是大数的计算方法。超过64位的大数计算,Java和Python都能直接算,而C++不能直接算,需要用数组来模拟大数的存储。
  竞赛中常常用到很大的数组。强烈建议不要用动态分配,因为动态分配需要多写代码而且容易出错。定义为全局静态数组即可,而且不需要初始化为0,因为全局变量在编译时会自动初始化为全0。

#include <bits/stdc++.h>
using namespace std;
int a[10000000]; //定义一个很大的全局数组。自动初始化为0,不需要写成int a[10000000]={0};
int main(){
    cout << a[0];   //输出0
    return 0;
}

  大数组不能定义在函数内部,这样做会导致栈溢出。因为局部变量是函数用到时才分配,大小不能超过栈,而栈不会很大。
  这样写是错的:

#include <bits/stdc++.h>
using namespace std;
int main(){
    int a[10000000]={0}; //这样写是错的,大数组不能定义在函数内部
    cout << a[0];   //出错
    return 0;
}

  另外,注意全局变量和局部变量的初值。全局变量如果没有赋值,在编译时被自动初始化为0。在函数内部定义的局部变量,若需要初值为0,一定要初始化为0,否则可能为莫名其妙的值。

#include <bits/stdc++.h>
using namespace std;
int a;                //全局变量自动初始化为0
int c = 999;          //赋值为999
int main(){
    int b;
    cout << a <<endl; //输出0
    cout << c <<endl; //输出999
    cout << b <<endl; //由于b没有初始化,这里输出莫名奇妙的值
    return 0;
}

1.1 Java和Python计算大数

  Java和Python计算大数,理论上可以计算“无限大”的数,只要不超内存。
  用下面的简单题说明Java和Python的大数计算。
【题目描述】 大数计算:输入两行表示两个整数。分别计算加、减、乘、除,分5行输出和、差、积、商、余数。
(1)Java代码。注意负数的计算,负数的加减乘都没问题,但是除法可能出错。

import java.math.BigInteger;
import java.util.Scanner; 
public class Main {     
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        BigInteger a,b;
        a=sc.nextBigInteger();   
        b=sc.nextBigInteger(); 
        System.out.println(a.add(b)); 
        System.out.println(a.subtract(b));  
        System.out.println(a.multiply(b)); 
        System.out.println(a.divide(b)); 
        System.out.println(a.mod(b));     //注意:如果b是负数,这里可能报错
    }                     
}

(2)Python代码。注意负数的计算,加减乘都没问题,但是除法的结果可能比较奇怪。

a=int(input())
b=int(input())
print(a+b)
print(a-b)
print(a*b)
print(a // b)    #注意:如果a或b是负数,除法的结果可能比较怪,例如123//(-10)得-13
print(a % b)     #注意:如果a或b是负数,求余的结果可能比较怪,例如123%(-10) 得-7

1.2 C/C++高精度计算大数

  C++能表示的最大整数是64位的long long,如果需要计算更大的数,需要使用“高精度”。对于加减乘除四种计算,模拟每一位的计算,并处理进位或借位。
  (1)数字的读取和存储。因为整数a和b太大,无法直接赋值给C++的变量,不能按数字读入,只能按字符读入。大数a用字符串string读入,一个字符存一位数字。注意存储的顺序,读入的时候,数字的左边是高位,右边是低位,即a[0]是最高位,a[n-1]是最低位;但是计算时习惯用a[0]表示最低位,a[n-1]表示最高位,所以需要把输入的字符串倒过来。
  (2)加法和减法。简单地模拟即可。
  (3)乘法。模拟小学竖式乘法操作,例如34×67,计算过程:
在这里插入图片描述
  计算结果用int a[]存储,首先算出a[0]=4×7=28,a[1]=3×7+4×6=21+24,a[2]=3×6=18,然后处理进位,得到乘积2278。
  (4)除法。直接做除法有点麻烦,简单一点的方法是利用减法。例如a除以b,转化为a连续减去b,减了多少次就是商,最后不够减的是余数。

1.2.1 高精度加法

  链接:大整数加法
  把输入的数字存到字符串中,然后在add()中把字符转成数字,做完加法后再转回字符。

#include<bits/stdc++.h>
using namespace std;
int na[1005],nb[1005];  //加数和被加数
string add(string a,string b){
    int lena=a.size(),lenb=b.size();
    for(int i=0;i<lena;i++)
        na[lena-1-i] = a[i]-'0';  //把字符转成数字,然后翻转,使na[0]是最低位
    for(int i=0;i<lenb;i++)
        nb[lenb-1-i] = b[i]-'0';
    int lmax = lena>lenb ? lena : lenb;
    for(int i=0;i<lmax;i++) {
        na[i] += nb[i];
        na[i+1] += na[i]/10;   //处理进位
        na[i]%=10;
    }
    if(na[lmax]) lmax++;        //若最高位相加后也有进位,数字长度加1
    string ans;
    for(int i=lmax-1;i>=0;i--)  //把数字转成字符,然后翻转
        ans += na[i]+'0';
    return ans;
}
int main(){
    string a,b;
    cin >> a >> b;
    cout << add(a,b);
    return 0;
}

1.2.2 高精度减法

  链接:大整数减法

#include<bits/stdc++.h>
using namespace std;
int na[1005],nb[1005];             //被减数和减数
string sub(string a,string b){
    if(a == b) return "0";         //特判一下是否两数字相等
    bool neg = 0;                  //标记是否为负数
    if(a.size() < b.size() || a.size() == b.size() && a < b)
        swap(a, b), neg = 1;      //让a大于b
    int lena=a.size(),lenb=b.size();
    for(int i=0;i<lena;i++)        //把字符转成数字,然后翻转,使na[0]是最低位
        na[lena-1-i]=a[i]-'0';
    for(int i=0;i<lenb;i++)
        nb[lenb-1-i]=b[i]-'0';
    int lmax = lena;
    for(int i=0;i<lmax;i++){
        na[i] -= nb[i];
        if(na[i]<0){                //处理借位
            na[i]+=10;
            na[i+1]--;
        }
    }
    while(!na[--lmax] && lmax>0)    //找到首位为0的位置
         ;                          //什么都不做
    lmax++;
    string ans;
    for(int i=lmax-1;i>=0;i--)       //把数字转成字符,然后翻转
        ans += na[i]+'0';
    if(neg) ans = "-" + ans;          //查询一下是否为负数
    return ans;
}
int main(){
    string a,b;
    cin>>a>>b;
    cout<<sub(a,b);
    return 0;
}

1.2.3 高精度乘法

  链接:大整数乘法

#include<bits/stdc++.h>
using namespace std;
int na[1005], nb[1005], nc[1000005];
string mul(string a,string b){
    if(a=="0"||b=="0")  return "0";
    int lena=a.size(),lenb=b.size();
    for(int i=0;i<lena;i++)
        na[lena-i]=a[i]-'0';
    for(int i=0;i<lenb;i++)
        nb[lenb-i]=b[i]-'0';
    for(int i=1;i<=lena;i++)
        for(int j=1;j<=lenb;j++)
            nc[i+j-1] += na[i]*nb[j];
    for(int i=1;i<=lena+lenb;i++)
        nc[i+1]+=nc[i]/10,nc[i]%=10;
    string ans;
    if(nc[lena+lenb])  ans += nc[lena+lenb]+'0';
    for(int i=lena+lenb-1;i>=1;i--) ans += nc[i]+'0';
    return ans;
}
int main(){
    string a,b;
    cin>>a>>b;
    cout<<mul(a,b);
    return 0;
}

1.2.4 高精度除法

  链接:大整数除法

#include<bits/stdc++.h>
using namespace std;
string sub(string a,string b){//模拟大整数减法 
    string res;
    int n=a.size(),m=b.size(),i,by=1;
    reverse(a.begin(),a.end());
    reverse(b.begin(),b.end());
    for(i=0;i<m;++i){
        int t=a[i]-b[i]+9+by;
        res+=t%10+'0';
        by=t/10;
    }
    for(;i<n;++i){
        int t=a[i]-'0'+9+by;
        res+=t%10+'0';
        by=t/10;
    }
    //消去前缀零 
    while(res[--i]=='0'&&i>0);
    res=res.substr(0,i+1);
    reverse(res.begin(),res.end());
    return res; 
}
int main(){
    string s1,s2,res,ans;
    cin>>s1>>s2;
    bool h=false;
    int n=s1.size(),m=s2.size(),t;
    //查找被除数末端非零位 
    int f=n-1;
    while(s1[f]=='0')f--;
    //模拟除法 
    for(int i=0;i<n;++i){//遍历被除数 
        ans+=s1[i];
        t=0;
        while(ans.size()>m||ans.size()==m&&ans>=s2){//具体操作 
            ans=sub(ans,s2);//用减法模拟除法 
            t++;
        } 
        if(t||h){//等待商的首位 
            h=true;
            res+=t+'0';
        }
        if(ans.empty()&&i>=f){//处理后缀零 
            while(++i<n)res+='0'; 
        }
    }
    if(res.empty())res+='0';//余数为零 
    if(ans.empty())ans+='0';//商为零 
    cout<<res<<endl<<ans;
    return 0;
} 

2. 队列

  队列中的数据存取方式是“先进先出”,只能往队尾插入数据、从队头移出数据。队列的原型在生活中很常见,例如食堂打饭的队伍,先到先服务,不能插队。
  下图是队列的原理,队头head指向队列中的第一个元素 a 1 a_1 a1,队尾tail指向队尾最后一个元素 a n a_n an。元素只能从队头方向出去,元素只能从队尾进入队列。
在这里插入图片描述

2.1 手写队列

2.1.1 C/C++手写队列

  队列的代码很容易实现。如果使用环境简单,最简单的手写队列代码用数组实现。

const int N = 10000; 	  //定义队列容量,确保够用
int que[N];              //队列,用数组模拟
int head = 0;            //head始终指向队头。que[head]是队头。开始时队列为空,head = 0
int tail = -1;           //tail始终指向队尾。que[tail]是队尾。开始时队列为空,tail = -1
                         //队列长度等于tail-head+1
head++;                  //弹出队头元素,让head指向新队头。注意保持head <= tail
que[head];               //读队头
que[++tail] = data;      //入队:先tail加1,然后数据data入队。注意tail必须小于N

  这个手写代码有一个严重缺陷:如果进入队列的数据太多,使得tail超过了N,数组que[N]就会溢出,导致出错。
  用下面的例子给出上述手写代码的应用。
  约瑟夫问题 https://www.luogu.com.cn/problem/P1996
  约瑟夫问题是一个经典问题,可以用队列、链表等数据结构实现。下面的代码用队列来模拟报数。如果不理解代码,可以模拟执行的过程。

#include <bits/stdc++.h>
using namespace std;
const int N = 10000;  //定义队列大小,确保够用
int que[N];
int head=0, tail=-1;
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)  que[++tail] = i;
    while((tail-head+1)!=0){
        for(int i=1;i<m;i++){
            que[++tail] = que[head];
            head++;
        }
        cout << que[head] << " ";
        head++;
    }
    cout<<endl;
    return 0;
}

  代码第3行定义了队列的容量N = 10000。本题的n最大是100,每人出圈一次,所以队列长度一定不超过100×100。如果把N设置小了,例如N=2000,提交到OJ会返回RE,即Runtime Error,说明溢出了。
  如果要防止溢出,可以使用循环队列。在上面例子中,只需要设置一个N=100的循环队列即可。
  手写循环队列的代码见:《算法竞赛》第8页“1.2.2 手写循环队列”。
  队列是一种线性数据结构,线性数据结构的主要缺点是查找较慢。要在队列中查找某个元素,只能从头到尾一个个查找。

2.1.2 Java手写队列

  下面是Java的手写队列代码,和C++代码基本一样。

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] que = new int[10000];      // 定义队列大小,确保够用
        int head = 0, tail = -1;
        for (int i = 1; i <= n; i++)     que[++tail] = i;        
        while ((tail - head + 1) != 0) {
            for (int i = 1; i < m; i++) {
                que[++tail] = que[head];
                head++;
            }
            System.out.print(que[head] + " ");
            head++;
        }
        System.out.println();
    }
}

2.1.3 Python手写队列

  下面是Python的手写队列代码。这个手写队列是用list实现的,进队尾用append()实现,队列自动扩展,不会有溢出问题。

n, m = map(int, input().split())
que = [i for i in range(1, n+1)]
head, tail = 0, n-1              #队头和队尾
while tail - head + 1 != 0:
    for i in range(1, m):
        que.append(que[head])
        head += 1
        tail += 1
    print(que[head], end=' ')
    head += 1

2.2 C++ STL队列queue

  C++STL官方文档:英文主页 https://en.cppreference.com/,或中文主页https://zh.cppreference.com/
  queue的文档:https://en.cppreference.com/w/cpp/container/queue

  竞赛时一般不自己手写队列,而是用STL queue,而且没有溢出的问题,大大加快了做题速度。STL queue的主要操作见下表。
在这里插入图片描述

  这里有篇博文可以参考:STL queue
  下面是 约瑟夫问题 的STL queue实现。

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n,m;
    cin>>n>>m;
    queue<int>q;
    for(int i=1;i<=n;i++)   q.push(i);
    while(!q.empty()){
        for(int i=1;i<m;i++){
            q.push(q.front());
            q.pop();
        }
        cout << q.front() << " ";
        q.pop();
    }
    cout<<endl;
    return 0;
}

2.3 Java队列Queue

  Java官方文档:https://docs.oracle.com/en/java/
  Queue的文档:https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/util/Queue.html
  Java用LinkedList实现基本队列Queue。常用操作有:
在这里插入图片描述
  这篇博文可以参考:Java队列
  下面是 约瑟夫问题 的Java Queue实现。

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        Queue<Integer> q = new LinkedList<>();
        for (int i = 1; i <= n; i++)    q.offer(i);
        while (!q.isEmpty()) {
            for (int i = 1; i < m; i++) {
                q.offer(q.peek());
                q.poll();
            }
            System.out.print(q.peek() + " ");
            q.poll();
        }
    }
}

2.4 Python队列Queue和deque

  Python官方文档:https://docs.python.org/3/
  deque文档:https://docs.python.org/3/library/collections.html#collections.deque
  Python的队列可以用list、Queue、deque实现。
  下面先用Queue实现 约瑟夫问题 。

from queue import Queue
n, m = map(int, input().split())
q = Queue()
for i in range(1, n+1):     q.put(i)
while not q.empty():
    for i in range(1, m):   q.put(q.get())
    print(q.get(), end=' ')

  不过,建议算法竞赛只使用deque,不要用queue。算法竞赛的代码都是单线程的,在这种场景下,deque比Queue快很多。
  deque是双向队列,队头和队尾都能插入和弹出。当成普通队列使用时,只用它的队头弹出、队尾插入功能即可。deque的常用操作有:
在这里插入图片描述
  参考博文:Deque
  下面用deque实现 约瑟夫问题 。

from collections import deque
n, m = map(int, input().split())
dq = deque(range(1, n+1))
while dq:
    dq.rotate(-(m-1))                 #把前m-1个数挪到队列尾部
    print(dq.popleft(), end=' ')      #队头是第m个数,删除并打印它。

2.5 例题

  机器翻译
  用一个哈希表hashtable[]模拟内存,若hashtable[x]=true,表示x在内存中,否则不在内存中。用队列queue对输入的单词排队,当内存超过M时,删除队头的单词。

2.5.1 C/C++代码

#include <bits/stdc++.h>
using namespace std;
bool hashtable[1003];      //全局数组,自动初始化为0
int main(){
    int m,n;
    cin >> m >> n;
    int ans=0;             //函数内部变量,一定要初始化为0
    queue<int> q;
    for(int i=0;i<n;i++)    {
        int x; cin >> x;
        if(hashtable[x] == false)  {
            hashtable[x] = true;
            if(q.size() < m)   q.push(x);
            else  {
                hashtable[q.front()] = false;
                q.pop();
                q.push(x);
            }
            ans++; //内存中没有这个单词,到外存找,答案加1
        }
    }
    cout << ans << '\n';
    return 0;
}

2.5.2 Java代码

import java.util.*;
public class Main {
	static boolean[] hashtable = new boolean[1003];
    static Queue<Integer> q = new LinkedList<>(); //使用LinkedList实现队列
    public static void main(String[] args) {
        int m, n;
        Scanner scanner = new Scanner(System.in);
        m = scanner.nextInt();
        n = scanner.nextInt();
        int ans=0;
        for (int i = 0; i < n; i++) {
            int x = scanner.nextInt();
            if (hashtable[x] == false) {
                hashtable[x] = true;
                if (q.size() < m)
                    q.add(x); //使用add方法添加元素到队列中
                else {
                    //int front = ; //使用poll方法取出队列头部元素并移除
                    hashtable[q.poll()] = false;
                    q.add(x);
                }
                ans++;
            }
        }
        System.out.println(ans);
    }
}

2.5.3 Python

from collections import deque  
hashtable = [False] * 1003  # 哈希表初始化,默认为False  
m, n = map(int, input().split())  # 输入m和n  
ans = 0      # 初始化答案为0  
q = deque()  # 初始化队列  
line =  list(map(int, input().split()))  #读第2行
for x in line:                           #处理每个数   
    if hashtable[x] is False:  # 如果x不在哈希表中  
        hashtable[x] = True  # 将x加入哈希表  
        if len(q) < m:  # 如果队列未满  
            q.append(x)  # 将x加入队列  
        else:  # 如果队列已满  
            hashtable[q.popleft()] = False  # 将队列首元素出队并从哈希表中删除  
            q.append(x)  # 将x加入队列  
        ans += 1  # 答案加1  
print(ans)  # 输出答案 

3. 习题

https://www.lanqiao.cn/problems/3745/learning/
https://www.lanqiao.cn/problems/3746/learning/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ansys Speos | 如何利用Speos联合optiSLang进行光导优化设计

在本例中&#xff0c;我们将使用 Speos 和 optiSLang 实现光导的设计优化&#xff0c;以实现汽车日行灯、内饰氛围灯等的光导设计&#xff0c;并改善光导亮度的均匀性&#xff0c;以自动优化设计的方式实现更好的照明外观。 概述 在汽车照明应用中&#xff0c;日行灯是一个独特…

[文件读取]Grafana未授权任意文件读取

1.1漏洞描述 漏洞编号Grafana未授权任意文件读取漏洞类型文件读取漏洞等级⭐⭐⭐漏洞环境VULFOCUS攻击方式 描述: Grafana是一个跨平台、开源的数据可视化网络应用程序平台。用户配置连接的数据源之后&#xff0c;Grafana可以在网络浏览器里显示数据图表和警告。 Grafana 存在…

【自定义列表头】vue el-table表格自定义列显示隐藏,多级表头自定义列显示隐藏,自由搭配版本和固定列版本【注释详细】

前言 功能介绍 最近遇到一个功能&#xff0c;需要的是把表格的列可以配置&#xff0c; 用户可以根据自己想要看的数据来改变表头列显示哪些隐藏哪些。 于是我做了两个版本。第一个版本是自由搭配的。 就是提前顶号所有的列&#xff0c;然后自己可以拖拽到想要位置顺序。 也可以…

打开IE浏览器

原文地址&#xff1a;https://www.xiaoheiwoo.com/windows-11-internet-explorer/#:~:text%E5%A6%82%E4%BD%95%E5%9C%A8%20Windows11%20%E4%B8%AD%E5%90%AF%E7%94%A8%20IE%E6%B5%8F%E8%A7%88%E5%99%A8%E7%9A%843%E7%A7%8D%E6%96%B9%E6%B3%95%201%20%E6%96%B9%E6%B3%95%E4%B8%80…

俄罗斯方块

一.准备工作 先创建一个新的Java项目命名为“俄罗斯方块”。再在该项目中创建一个文件夹命名为”images”&#xff0c;并将所需的图片素材拖入该文件夹。 二.代码呈现 编写小方块类&#xff1a; import java.awt.image.BufferedImage;/*** 描述:小方块类* 属性&#xff1a;…

Nas搭建webdav服务器并同步Zotero科研文献

无需云盘&#xff0c;不限流量实现Zotero跨平台同步&#xff1a;内网穿透私有WebDAV服务器 文章目录 无需云盘&#xff0c;不限流量实现Zotero跨平台同步&#xff1a;内网穿透私有WebDAV服务器一、Zotero安装教程二、群晖NAS WebDAV设置三、Zotero设置四、使用公网地址同步Zote…

不会代码的时候,如何使用Jmeter完成接口测试?

1.接口测试简介 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系等。 2.接口测试流程 接口测试…

推荐一个非常好用的uniapp的组件库【TMUI3.0】

文章目录 前言官网地址如何使用&#xff1f;注意事项后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;前端系列文章 &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果…

Java虚拟机运行时数据区结构详解

Java虚拟机运行时数据区结构如图所示 程序计数器 程序计数器&#xff08;Program Counter Register&#xff09;是一块较小的内存空间&#xff0c;它可以看作是当前线程所执行的字节码的行号指示器。 多线程切换时&#xff0c;为了能恢复到正确的执行位置&#xff0c;每条线程…

[Python学习笔记]Python 性能分析

在上一章节 [Python学习笔记]Requests性能优化之Session 中&#xff0c;通过在 Resquests 中使用 session&#xff0c;将 Python 脚本的运行效率提升了 3 倍。但当时对问题的排查主要是基于程序实现逻辑的推断&#xff0c;并没有实质性的证据。 本次使用 Python 的性能分析工具…

【每日一题】最长奇偶子数组

文章目录 Tag题目来源解题思路方法一&#xff1a;枚举方法二&#xff1a;一次遍历 其他语言python3 写在最后 Tag 【一次遍历】【枚举】【数组】【2023-11-16】 题目来源 2760. 最长奇偶子数组 解题思路 方法一&#xff1a;枚举 本题有多种方法可以解决&#xff0c;最朴素的…

如何有效防止公司内部的信息泄露?

信息泄露对公司可能带来严重影响&#xff0c;因此采取一系列措施以确保信息安全至关重要。以下是一些建议&#xff1a; 部署综合的防泄密软件&#xff1a; 在公司内部&#xff0c;使用专业的防泄密软件如华企盾DSC系统&#xff0c;涵盖文件加密、U盘管控、桌面行为管理、日志审…

极智AI | Realtime Multi-Person人体姿态估计之OpenPose

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文来介绍一下 Realtime Multi-Person人体姿态估计之OpenPose。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:https://t.zsxq.com/0aiNxERDq OpenPose 主要是…

qt使用AES加密、解密字符串

一、AES算法 AES (Advanced Encryption Standard) 是一种对称加密算法&#xff0c;是目前被广泛使用的数据加密标准之一。该算法旨在取代DES (Data Encryption Standard) 算法。AES最初由比利时密码学家 Joan Daemen 和 Vincent Rijmen 提出&#xff0c;经过多年的演化、改进和…

TSINGSEE青犀智慧机房AI+视频智能监管方案,保障机房设备稳定运转

一、背景与需求分析 随着互联网的高速发展&#xff0c;机房数量及配套环境设备日益增多&#xff0c;其运行状况直接决定着企业组织的运营效率和服务质量。作为企业信息化的核心&#xff0c;机房的安全监测与管理&#xff0c;不仅关系到企业的稳定运转&#xff0c;同时也关系到…

jffs2文件系统(二)

本篇文章讲解一下如何制作jffs2文件系统&#xff0c;以及如何在linux下把jffs2作为根文件系统使用。 文件系统制作 制作工具&#xff1a;mtd_utils&#xff0c;可以自己安装 mkfs.jffs2 -o root-uclibc-jffs2 -r root-uclibc -e 0x10000 -s 0x1000 -n -l -X zlib --pad0x10000…

(珍藏版)Redis经典面试题32道,吊打面试官!

文章目录 Redis最新2023年面试题高级面试题及附答案解析(3)01、请用 Redis 和任意语言实现一段恶意登录保护的代码&#xff1f;02、Pipeline 有什么好处&#xff0c;为什么要用 pipeline&#xff1f;03、Redis 常用管理命令有哪些&#xff1f;04、Redis 持久化数据和缓存怎么做…

避坑指南!!在树莓派4b上安装Pycharm以及无法使用终端的问题解决!!

一、下载Pycharm–linux安装包 这里是踩的第一个坑&#xff0c;一开始我下载的是pycharm2023-linux版本的。后面发现缺少很多东西&#xff0c;安装不成功。后面下载了低版本的Pycharm才可以。我下载的是2020版本的。注意&#xff1a;在下载安装包时&#xff0c;一定要在window…

ECRS工时分析软件:全面提升生产效率和产能管理的利器

在当今高度竞争的商业环境中&#xff0c;企业需要不断提升生产效率和产能管理以保持竞争优势。ECRS工时分析软件作为一款专业的工具&#xff0c;通过自动导出各种表格和图表&#xff0c;全面涵盖了生产过程中的各种分析和改善活动&#xff0c;为企业提供了提升生产效率和产能管…

思维导图软件 Xmind mac中文版特点介绍

XMind 2022 mac是一款思维导图软件&#xff0c;可以帮助用户创建各种类型的思维导图和概念图。 XMind mac软件特点 - 多样化的导图类型&#xff1a;XMind提供了多种类型的导图&#xff0c;如鱼骨图、树形图、机构图等&#xff0c;可以满足不同用户的需求。 - 强大的功能和工具&…