二、数据结构

链表

单链表

https://www.acwing.com/problem/content/828/

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
//head:头节点的指向   e[i]:当前节点i的值  ne[i]:当前节点i的next指针   idx:当前存储的点
int head, e[N], ne[N], idx;//初始化
void init(){head = -1;idx = 1;
}//将x插入到头节点
void add_head(int x){e[idx] = x;ne[idx] = head;head = idx;idx++;
}//将x插入到下标是k的后面
void add(int k, int x){e[idx] = x;ne[idx] = ne[k];ne[k] = idx;idx++;
}//删除第k+1个节点
void remove(int k){ne[k] = ne[ne[k]];
}int main(){init();int m;cin>>m;char c;while(m--){cin>>c;int k, x;if(c == 'H'){cin>>x;add_head(x);}else if(c == 'D'){cin>>k;//删除头节点if(k == 0){head = ne[head];}else{remove(k);}}else{cin>>k>>x;add(k, x);}}for(int i = head; i != -1; i = ne[i]){cout<<e[i]<<" ";}return 0;
}

双链表

https://www.acwing.com/problem/content/829/

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int e[N], l[N], r[N], idx;//初始化,0表示左端点,1表示右端点,下标从2开始
void init(){r[0] = 1;l[1] = 0;idx = 2;
}//在第k个点的右边插入x
void add(int k, int x){e[idx] = x;r[idx] = r[k];l[idx] = k;l[r[k]] = idx;r[k] = idx;idx++;
}//删除第k个点
void remove(int k){r[l[k]] = r[k];l[r[k]] = l[k];
}int main(){init();int m;cin>>m;string s;while(m--){cin>>s;int k, x;if(s == "L"){cin>>x;add(0, x);}else if(s == "R"){cin>>x;add(l[1], x);}else if(s == "D"){cin>>k;//下标从2开始remove(k + 1);}else if(s == "IL"){cin>>k>>x;add(l[k + 1], x);}else{cin>>k>>x;add(k + 1, x);}}for(int i = r[0]; i != 1; i = r[i]){cout<<e[i]<<" ";}return 0;
}

先进后出

模拟栈

https://www.acwing.com/problem/content/830/

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int st[N], tt;//栈顶插入一个元素
void push(int x){st[++tt] = x;
}//删除栈顶
void pop(){tt--;
}//判断栈是否为空
void empty(){cout<<(tt > 0 ? "NO" : "YES")<<endl;
}//查询栈顶元素
void query(){cout<<st[tt]<<endl;
}int main(){int m;cin>>m;string s;while(m--){int x;cin>>s;if(s == "push"){cin>>x;push(x);}else if(s == "pop"){pop();}else if(s == "empty"){empty();}else{query();}}return 0;
}

表达式求值

https://www.acwing.com/problem/content/3305/

中缀表达式,需要括号;后缀表达式,不需要括号

#include<iostream>
#include<unordered_map>
using namespace std;
const int N = 1e5 + 10;
int st1[N], tt1, tt2; //存储数字
char st2[N]; //存储运算符
unordered_map<char, int> mp{{'+', 1}, {'-', 1}, {'*', 2}, {'/', 2}}; //运算符优先级
string s;void f(){int x1 = st1[tt1];tt1--;int x2 = st1[tt1];tt1--;char c = st2[tt2];tt2--;int res = 0;if(c == '-'){res = x2 - x1;}else if(c == '+'){res = x2 + x1;}else if(c == '*'){res = x2 * x1;}else{res = x2 / x1;}st1[++tt1] = res;
}int main(){cin>>s;int n = s.size();for(int i = 0; i < n; i++){//如果是数字if(isdigit(s[i])){int x = 0, j = i;//计算数字while(j < n && isdigit(s[j])){x = x * 10 + (s[j] - '0');j++;}//存储到数字栈中st1[++tt1] = x;//因为for循环i还要++i = j - 1;}else if(s[i] == '('){//存储到运算符栈中st2[++tt2] = s[i];}else if(s[i] == ')'){//当栈顶不等于左括号时,就计算括号里的while(st2[tt2] != '('){f();}//弹出左括号tt2--;}else{//当运算符栈中有元素,当前元素小于等于栈顶优先级,则先计算之前的while(tt2 > 0 && mp[st2[tt2]] >= mp[s[i]]){f();}//存储到运算符栈中st2[++tt2] = s[i];}}//防止算了括号里的就结束了while(tt2 > 0){f();}cout<<st1[tt1];return 0;
}

队列

先进先出

模拟队列

https://www.acwing.com/problem/content/831/

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int q[N], hh, tt = -1;//插入元素x
void push(int x){q[++tt] = x;
}//弹出队头
void pop(){hh++;
}//判断队列是否为空
void empty(){cout<<(hh <= tt ? "NO" : "YES")<<endl;
}//查询队头
void query(){cout<<q[hh]<<endl;
}int main(){int m;cin>>m;string s;while(m--){cin>>s;int x;if(s == "push"){cin>>x;push(x);}else if(s == "pop"){pop();}else if(s == "empty"){empty();}else{query();}}return 0;
}

单调栈

https://www.acwing.com/problem/content/832/

存储一个单调递增的序列

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int st[N], tt;
int n, x;int main(){cin>>n;for(int i = 0; i < n; i++){cin>>x;//如果栈顶大于等于当前元素,那就弹出栈顶while(tt && st[tt] >= x){tt--;}//如果栈顶小于当前元素,那就输出if(tt){cout<<st[tt]<<" ";}else{cout<<-1<<" ";}//入栈st[++tt] = x;}return 0;
}

单调队列

https://www.acwing.com/problem/content/156/

#include<iostream>
using namespace std;
const int N = 1e6 + 10;
int a[N], q[N]; //q数组存储下标
int n, k, x;int main(){cin>>n>>k;for(int i = 0; i < n; i++){cin>>a[i];}int hh = 0, tt = -1;for(int i = 0; i < n; i++){cin>>x;//如果队头已经出窗口了,那就出队if(hh <= tt && i - k + 1 > q[hh]){hh++;}//如果队尾大于等于当前元素,那就出队while(hh <= tt && a[q[tt]] >= a[i]){tt--;}//存储下标,要放在输出前,防止第三个元素还没进队列q[++tt] = i; if(i >= k - 1){cout<<a[q[hh]]<<" ";}}cout<<endl;hh = 0, tt = -1;for(int i = 0; i < n; i++){cin>>x;//如果队头已经出窗口了,那就出队if(hh <= tt && i - k + 1 > q[hh]){hh++;}//如果队尾小于等于当前元素,那就出队while(hh <= tt && a[q[tt]] <= a[i]){tt--;}//存储下标,要放在输出前,防止第三个元素还没进队列q[++tt] = i; if(i >= k - 1){cout<<a[q[hh]]<<" ";}}return 0;
}

KMP

https://www.acwing.com/problem/content/833/

在这里插入图片描述

#include<iostream>
using namespace std;
const int N = 1e6 + 10;
int ne[N];
int n, m;
char s[N], p[N];int main(){//下标从1开始cin >> m >> p + 1 >> n >> s + 1;//求ne数组for(int i = 2, j = 0; i <= n; i++){while(j && p[i] != p[j + 1]){j = ne[j];}if(p[i] == p[j + 1]){j++;}ne[i] = j;}//s串和p串匹配for(int i = 1, j = 0; i <= n; i++){//如果j没有回到起点,且不相等,那就到标记的位置while(j && s[i] != p[j + 1]){j = ne[j];}//如果匹配,j向后移if(s[i] == p[j + 1]){j++;}//如果完全匹配p串,那就到下一个位置再尝试if(j == m){cout << i - m << " ";j = ne[j];}}return 0;
}//下标从0开始
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;const int N = 1000010;int n, m;
char s[N], p[N];
int ne[N];int main()
{cin >> m >> p >> n >> s;ne[0] = -1;for (int i = 1, j = -1; i < m; i ++ ){while (j >= 0 && p[j + 1] != p[i]) j = ne[j];if (p[j + 1] == p[i]) j ++ ;ne[i] = j;}for (int i = 0, j = -1; i < n; i ++ ){while (j != -1 && s[i] != p[j + 1]) j = ne[j];if (s[i] == p[j + 1]) j ++ ;if (j == m - 1){cout << i - j << ' ';j = ne[j];}}return 0;
}

Trie树

高效的存储和查找字符串集合

Trie字符串统计

https://www.acwing.com/problem/content/837/

在这里插入图片描述

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int son[N][26], cnt[N], idx; //0是根节点也是空节点
int n;//插入字符串
void insert(char str[N]){int p = 0;//字符串结尾是'\0'for(int i = 0; str[i]; i++){//字母对应成数字int u = str[i] - 'a';if(!son[p][u]){son[p][u] = ++idx;}p = son[p][u];}//标记以这个节点结束的字符串有多少个cnt[p]++;
}//查询字符串
int query(char str[]){int p = 0;for(int i = 0; str[i]; i++){int u = str[i] - 'a';if(!son[p][u]){return 0;}p = son[p][u];}return cnt[p];
}int main(){cin>>n;char c, s[N];while(n--){cin>>c;if(c == 'I'){cin>>s;insert(s);}else{cin>>s;cout<<query(s)<<endl;}}return 0;
}

最大异或对

https://www.acwing.com/problem/content/145/

字典树不单单可以高效存储和查找字符串集合, 还可以存储二进制数字
将每个数以二进制方式存入字典树, 找的时候从最高位去找有无该位的异

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int son[31 * N][2], idx;
int n, x;
int ans, res;void insert(int x){int p = 0;for(int i = 30; i >= 0; i--){int u = x >> i & 1; if(!son[p][u]){son[p][u] = ++idx;}p = son[p][u];}
}int query(int x){int p = 0;int sum = 0;for(int i = 30; i >= 0; i--){int u = x >> i & 1; if(son[p][!u]){p = son[p][!u];sum = 2 * sum + !u;}else{p = son[p][u];sum = 2 * sum + u;}}return sum;
}int main(){cin>>n;for(int i = 0; i < n; i++){cin>>x;insert(x);res = query(x);ans = max(ans, res ^ x);}cout<<ans;return 0;
}

并查集

合并集合

https://www.acwing.com/problem/content/838/

开始时每个集合都是一个独立的集合,并且都是等于自己本身下标的数
例如:p[5]=5,p[3]=3;
如果是M操作的话那么就将集合进行合并,合并的操作是:
p[3]=p[5]=5;
所以3的祖宗节点便成为了5
此时以5为祖宗节点的集合为{5,3}
如果要将p[9]=9插入到p[3]当中,应该找到3的祖宗节点,
然后再把p[9]=9插入其中,所以p[9]=find(3);(find()函数用于查找祖宗节点)
也可以是p[find(9)]=find(3),因为9的节点本身就是9
此时以5为祖宗节点的集合为{5,3,9};

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int p[N];
int n, m;//找到根节点,路径压缩
int find(int x){if(x != p[x]){p[x] = find(p[x]);}return p[x];
}int main(){cin>>n>>m;//初始化每个节点的根节点for(int i = 1; i <= n; i++){p[i] = i;}char c;int a, b;while(m--){cin>>c;if(c == 'M'){cin>>a>>b;//将a合并到b的集合中p[find(a)] = find(b);}else{cin>>a>>b;cout<<(find(a) == find(b) ? "Yes" : "No")<<endl;}}return 0;
}

连通块中点的数量

https://www.acwing.com/problem/content/839/

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int p[N], cnt[N];
int n, m;int find(int x){if(x != p[x]){p[x] = find(p[x]);}return p[x];
}int main(){cin>>n>>m;for(int i = 0; i < n; i++){p[i] = i;cnt[i] = 1;}string s;while(m--){cin>>s;int a, b;if(s == "C"){cin>>a>>b;//如果是一个集合,就不用再加了if(find(a) == find(b)){continue;}cnt[find(b)] += cnt[find(a)];p[find(a)] = find(b);}else if(s == "Q1"){cin>>a>>b;cout<<(find(a) == find(b) ? "Yes" : "No")<<endl;}else{cin>>a;cout<<cnt[find(a)]<<endl;}}return 0;
}

食物链

https://www.acwing.com/problem/content/description/242/

#include<iostream>
using namespace std;
const int N = 5e4 + 10;
int p[N], d[N]; //p存储根节点,d存储到根节点的距离
int n, k;
int res;int find(int x){if(x != p[x]){int t = find(p[x]);d[x] += d[p[x]];p[x] = t;}return p[x];
}int main(){cin>>n>>k;for(int i = 1; i <= n; i++){p[i] = i;}int c, x, y;while(k--){cin>>c>>x>>y;if(x > n || y > n){res++;}else{//找到x和y的根节点int px = find(x), py = find(y);if(c == 1){//如果父节点相同,但是距离不同,就是假话if(px == py && (d[x] - d[y]) % 3){res++;}else if(px != py){//不在一个集合,放在一个集合中p[px] = py;d[px] = d[y] - d[x]; //d[px] + d[x]和d[y]同余}}else{if(px == py && (d[x] - d[y] - 1) % 3){res++;}else if(px != py){p[px] = py;d[px] = d[y] - d[x] + 1;}}}}cout<<res;return 0;
}

用一个一维数组存储一颗二叉树
1.插入一个元素
2.求集合当中最小值(最大值)
3.删除最小值(最大值)
4.删除任意一个元素
5.修改任意一个元素

小根堆:根节点小于等于左右子节点

堆排序

https://www.acwing.com/problem/content/840/
在这里插入图片描述

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int h[N], cnt;
int n, m;void down(int u){int t = u;//如果根节点大于左右子节点,那就交换下标if(2 * u <= cnt && h[2 * u] < h[t]){t = 2 * u;}if(2 * u + 1 <= cnt && h[2 * u + 1] < h[t]){t = 2 * u + 1;}//如果已经交换了下标,那就递归子节点,u为根节点,t为子节点if(h[t] != h[u]){swap(h[t], h[u]);down(t);}
}int main(){cin>>n>>m;cnt = n;for(int i = 1; i <= n; i++){cin>>h[i];}for(int i = n / 2; i > 0; i--){down(i);}while(m--){cout<<h[1]<<" ";h[1] = h[cnt];cnt--;down(1);}return 0;
}

模拟堆

https://www.acwing.com/problem/content/841/

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int h[N], cnt, m; //m:第几个插入的数
int hp[N], ph[N]; //hp[k]:第k个插入的点是几号,ph[j]:j号是第几个插入的点
int n;void head_swap(int a, int b){swap(hp[ph[a]], hp[ph[b]]);swap(ph[a], ph[b]);swap(h[a], h[b]);
}void down(int u){int t = u;if(2 * u <= cnt && h[2 * u] < h[t]){t = 2 * u;}if(2 * u + 1 <= cnt && h[2 * u + 1] < h[t]){t = 2 * u + 1;}if(h[t] != h[u]){head_swap(t, u);down(t);}
}void up(int u){while(u / 2 > 0 && h[u / 2] > h[u]){head_swap(u / 2, u);u /= 2;}
}int main(){cin>>n;string s;while(n--){cin>>s;int k, x;if(s == "I"){cin>>x;m++;cnt++;hp[m] = cnt;ph[cnt] = m;h[cnt] = x;up(cnt);}else if(s == "PM"){cout<<h[1]<<endl;}else if(s == "DM"){head_swap(1, cnt);cnt--;down(1);}else if(s == "D"){cin>>k;k = hp[k];head_swap(k, cnt);cnt--;down(k);up(k);}else{cin>>k>>x;k = hp[k];h[k] = x;down(k);up(k);}}return 0;
}

哈希表

模拟散列表

https://www.acwing.com/problem/content/842/

//拉链法
#include<iostream>
#include<cstring>
using namespace std;
const int N = 1e5 + 3; //大于1e5的第一个质数
int h[N], e[N], ne[N], idx;
int n;void insert(int x){//加N防止模出来的数是负数int k = (x % N + N) % N; e[idx] = x;ne[idx] = h[k];h[k] = idx;idx++;
}int find(int x){int k = (x % N + N) % N;for(int i = h[k]; i != -1; i = ne[i]){if(e[i] == x){return 1;}}return 0;
}int main(){cin>>n;memset(h, -1, sizeof(h));char c;while(n--){cin>>c;int x;if(c == 'I'){cin>>x;insert(x);}else{cin>>x;if(find(x)){cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}}}return 0;
}//开放寻地址法
#include<iostream>
#include<cstring>
using namespace std;
const int N = 2e5 + 3, null = 0x3f3f3f3f; //第一个大于2e5的质数
int h[N];
int n;int find(int x){int k = (x % N + N) % N;//如果k位置不等于x,那就找下一个数while(h[k] != x && h[k] != null){k++;//到结尾也没找到,就从头开始找if(k == N){k = 0;}}return k;
}int main(){memset(h, 0x3f, sizeof(h));cin>>n;char c;while(n--){cin>>c;int x;if(c == 'I'){cin>>x;//找到第一个空位置int k = find(x);h[k] = x;}else{cin>>x;//查询是否有x存在int k = find(x);cout<<(h[k] == x ? "Yes" : "No")<<endl;}}return 0;
}

字符串哈希

https://www.acwing.com/problem/content/843/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include<iostream>
using namespace std;
const int N = 1e5 + 10, p = 131; //p为131或13331,2的64次方,溢出int就等效于取模了
unsigned long long a[N], b[N]; //a存储前缀和,b存储要乘的进位数
char s[N];
int n, m;//初始化
void init(){b[0] = 1;for(int i = 1; i <= n; i++){a[i] = a[i - 1] * p + s[i];b[i] = b[i - 1] * p;}
}unsigned long long get(int l, int r){return a[r] - a[l - 1] * b[r - l + 1];
}int main(){cin>>n>>m>>s + 1;init();int l1, r1, l2, r2;while(m--){cin>>l1>>r1>>l2>>r2;cout<<(get(l1, r1) == get(l2, r2) ? "Yes" : "No")<<endl;}return 0;
}

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

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

相关文章

antdpro框架npm install 报错,切换tyarn安装成功。

报错日志 有时间补 当前版本 解决办法 进入工作目录 安装官方推荐的tyarn工具&#xff1a;npm install yarn tyarn -g 进行依赖安装&#xff1a;tyarn 启动项目 &#xff1a;tyarn start 注意&#xff1a; 技术迭代较快&#xff0c;建议查询官网后实践&#xff0c;以上作为…

Hive-架构与设计

架构与设计 一、背景和起源二、框架概述1.设计特点 三、架构图1.UI交互层2.Driver驱动层3.Compiler4.Metastore5.Execution Engine 四、执行流程1.发起请求2.获取执行计划3.获取元数据4.返回元数据5.返回执行计划6.运行执行计划7.运行结果获取 五、数据模型1.DataBase数据库2.T…

2024-02-11 Unity 编辑器开发之编辑器拓展2 —— 自定义窗口

文章目录 1 创建窗口类2 显示窗口3 窗口事件回调函数4 窗口中常用的生命周期函数5 编辑器窗口类中的常用成员6 小结 1 创建窗口类 ​ 当想为 Unity 拓展一个自定义窗口时&#xff0c;只需实现继承 EditorWindow 的类即可&#xff0c;并在该类的 OnGUI 函数中编写面板控件相关的…

python 基础知识点(蓝桥杯python科目个人复习计划36)

今日复习计划&#xff1a;DFS搜索基础 1.简介 搜索方法&#xff1a;穷举问题解空间部分&#xff08;所有情况&#xff09;&#xff0c;从而求出问题的解。 深度优先搜索&#xff1a;本质上是暴力枚举 深度优先&#xff1a;尽可能一条路走到底&#xff0c;走不了再回退。 2…

CTF-PWN-沙箱逃脱-【侧信道爆破】(2021-蓝帽杯初赛-slient)

文章目录 侧信道攻击测信道爆破2021-蓝帽杯初赛-slient先自己准备个flag检查沙箱IDA源码mainsub_A60() 相关知识size_t getpagesize(void)void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);range(i,j)编写相关shellcode发现"的用法此时…

Nginx实战:3-日志按天分割

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、方式1&#xff1a;定时任务执行分割脚本 1.分割日志脚本 2.添加定时任务 二、方式2&#xff1a;logrotate配置分割 1.logrotate简单介绍 2.新增切割ngi…

互联网加竞赛 基于深度学习的视频多目标跟踪实现

文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的视频多目标跟踪实现 …

k8s-深入理解Service(为Pod提供负载均衡和发现)

一、Service存在的意义 二、Service的定义和创建 Pod与Service的关系 Service的定义和创建 三、Service使用NodePort对外暴露应用 四种类型&#xff0c;常用的三种&#xff1a; 指定Service的NodePort端口 在实际生产中&#xff0c;k8s的集群不会直接暴露在公网中&#xff0c…

linux应用 进程间通信之信号量(System V)

1、定义 System V 信号量是一种用于进程间同步和互斥的机制&#xff0c;它是 System V IPC&#xff08;Inter-Process Communication&#xff0c;进程间通信&#xff09;机制的一部分。信号量通常用于控制对共享资源的访问&#xff0c;以避免竞争条件&#xff08;race conditi…

2.9日学习打卡----初学RabbitMQ(四)

2.9日学习打卡 一.RabbitMQ 死信队列 在MQ中&#xff0c;当消息成为死信&#xff08;Dead message&#xff09;后&#xff0c;消息中间件可以将其从当前队列发送到另一个队列中&#xff0c;这个队列就是死信队列。而在RabbitMQ中&#xff0c;由于有交换机的概念&#xff0c;实…

每日五道java面试题之java基础篇(一)

第一题 什么是java? PS&#xff1a;碎怂 Java&#xff0c;有啥好介绍的。哦&#xff0c;⾯试啊。 Java 是⼀⻔⾯向对象的编程语⾔&#xff0c;不仅吸收了 C语⾔的各种优点&#xff0c;还摒弃了 C⾥难以理解的多继承、指针等概念&#xff0c;因此 Java 语⾔具有功能强⼤和简单易…

【Linux系统 04】OpenEuler配置

目录 一、镜像文件下载 二、配置静态IP 三、启动SSH连接 四、免密登录 五、安装常用软件 一、镜像文件下载 官方下载地址&#xff1a;openEuler下载 | 欧拉系统ISO镜像 | openEuler社区官网 选择一个版本&#xff0c;lopenEuler通常有两种版本&#xff1a; 创新版&…

vtkActor 设置特定图层 显示及置顶显示

问题&#xff0c;有时我们需要显示某个 Actor 在相机最前面&#xff0c;可以遮盖后面的物体;显示在顶层有点不准确&#xff1b;因为这个还相机位置也有关系&#xff1b; 这里讲三种情况&#xff1a; 1. 设置 Mapper 顶层&#xff0c;尝试了一下&#xff0c;可以用于某些场景&…

Redis 双写一致性

问题&#xff1a;redis 作为缓存&#xff0c;mysql 的数据如何与 redis 进行同步呢&#xff1f;&#xff08;双写一致性&#xff09; 双写一致性是指当修改了数据库的数据也要同时更新缓存的数据&#xff0c;缓存和数据库的数据要保持一致。 读操作&#xff1a;缓存命中&…

深入探究 HTTP 简化:httplib 库介绍

✏️心若有所向往&#xff0c;何惧道阻且长 文章目录 简介特性主要类介绍httplib::Server类httplib::Client类httplib::Request类httplib::Response类 示例服务器客户端 总结 简介 在当今的软件开发中&#xff0c;与网络通信相关的任务变得日益普遍。HTTP&#xff08;Hypertext…

备战蓝桥杯---数学基础2

学了常见的筛法&#xff0c;让我们看个题&#xff1a; 首先&#xff0c;我们知道欧拉筛复杂度为nlognlogn,这题可以承受&#xff0c;但是空间上存不了&#xff0c;而如果我们枚举1--n^1/2&#xff0c;复杂度不允许。 其实在枚举的方法中&#xff0c;我们只需找出有无在【2&…

JavaScript脚本:async,defer

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 JavaScript 脚本 是 web 开发中的重要组成部分&#xff0c;用于为网…

vtk三维场景基本要素 灯光、相机、颜色、纹理映射 简介

整理一下VTK 三维场景基本要素&#xff0c;后面会一一进行整理&#xff1b; 1. 灯光 vtkLight 剧场里有各式各样的灯光&#xff0c;三维渲染场景中也一样&#xff0c;可以有多个灯光存在。灯光和相机 是三维渲染场景必备的要素&#xff0c;vtkRenderer会自动创建默认的灯光和…

基于查询模板的知识图谱问答系统

目录 前言1 知识图谱问答系统的两个核心问题1.1 问句的表示与语义理解1.2 知识库的映射和匹配 2 问答基本流程2.1 模板生成2.2 模板实例化2.3 查询排序和结果获取 3 模板自动生成3.1 quint方法3.2 对齐任务 4 基于查询模板的知识图谱问答系统优缺点4.1 系统的优点4.2 系统的缺点…

阿里云游戏服务器租用费用价格组成,费用详单

阿里云游戏服务器租用价格表&#xff1a;4核16G服务器26元1个月、146元半年&#xff0c;游戏专业服务器8核32G配置90元一个月、271元3个月&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云游戏专用服务器详细配置和精准报价&#xff1a; 阿里云游戏服务器租用价格表 阿…