Codeforces Round 968 (Div. 2)(A,B,C,D1,D2)

比赛链接

这场还是有点东西的,这几个题都不难,但是要做对还是比较麻烦的。B是一个简单的博弈,C是鸽巢原理,D1是推一个结论,D2是一个dp,初始化比较烦人。


A. Turtle and Good Strings

题面:

乌龟认为,如果存在一串字符串 t 1 , t 2 , … , t k t_1, t_2, \ldots, t_k t1,t2,,tk k k k 是任意整数),那么字符串 s s s 就是一个好字符串:

  • k ≥ 2 k \ge 2 k2 .
  • s = t 1 + t 2 + … + t k s = t_1 + t_2 + \ldots + t_k s=t1+t2++tk ,其中 + + + 表示连接操作。例如, abc = a + bc \texttt{abc} = \texttt{a} + \texttt{bc} abc=a+bc
  • 对于所有 1 ≤ i < j ≤ k 1 \le i \lt j \le k 1i<jk t i t_i ti 的第一个字符不等于 1 ≤ i < j ≤ k 1 \le i \lt j \le k 1i<jk不等于 t j t_j tj 的最后一个字符。

乌龟得到一个由小写拉丁字母组成的字符串 s s s 。请告诉他 s s s 是否是一个好字符串!

思路:

其实发现如果拆的字符串多的话,比较的字符就会更多,更不容易满足条件,所以我们就拆成两个就可以了。

而且无论中间怎么拆,第一个字符串的第一个字符一定会和最后一个字符串的最后一个字符进行比较,其他的不比较,所以我们只需要第一个字符串的第一个字符和最后一个字符串的最后一个字符比较一下就可以了。

code:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int T,n;
string s;int main(){cin>>T;while(T--){cin>>n>>s;if(s[0]==s[n-1])puts("NO");else puts("YES");}return 0;
}

B. Turtle and Piggy Are Playing a Game 2

题面:

小乌龟和小猪在玩一个数列游戏。他们得到一个数列 a 1 , a 2 , … , a n a_1, a_2, \ldots, a_n a1,a2,,an ,小乌龟先来。小乌龟和小猪轮流进行(所以,小乌龟做第一轮,小猪做第二轮,小乌龟做第三轮,等等)。

游戏过程如下

  • 假设当前序列的长度为 m m m 。如果是 m = 1 m = 1 m=1 ,游戏结束。
  • 如果游戏没有结束,轮到小乌龟,那么小乌龟必须选择一个整数 i i i ,使得 1 ≤ i ≤ m − 1 1 \le i \le m - 1 1im1 ,将 a i a_i ai 设置为 max ⁡ ( a i , a i + 1 ) \max(a_i, a_{i + 1}) max(ai,ai+1) ,并删除 a i + 1 a_{i + 1} ai+1
  • 如果游戏没有结束,轮到小猪,那么小猪必须选择一个整数 i i i ,使得 1 ≤ i ≤ m − 1 1 \le i \le m - 1 1im1 ,将 a i a_i ai 设置为 min ⁡ ( a i , a i + 1 ) \min(a_i, a_{i + 1}) min(ai,ai+1) ,并删除 a i + 1 a_{i + 1} ai+1

小乌龟希望最后最大化 a 1 a_1 a1 的值,而小猪希望最后最小化 a 1 a_1 a1 的值。如果双方都以最优方式下棋,求最后 a 1 a_1 a1 的值。

思路:

这种放在 B B B 的位置上的题一般出不到什么牛逼高大上的博弈模型,或者是SG函数,所以我们就以最简单的博弈思想来看就行了:要么自己养出最大最小值,要么阻止对方得到最小最大值。

我们随便挑选一个人的视角,比如我们代入小乌龟的视角,想要最大化最后的值,那么我们有两个策略:

  1. 每次删掉最大值旁边的数,保留最小值
  2. 删掉最小值,让对方得不到最小值。

其实我们发现第一个策略是不可行的,因为对方只要采取第二种策略,我们留着的最大值就消失了,所以这个博弈其实就是让两个人互相删掉对方的最大最小值,最后剩下的其实就是中值。

code:

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=1e5+5;int T,n,a[maxn];int main(){cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];sort(a+1,a+n+1);cout<<a[n/2+1]<<"\n";}return 0;
}

C. Turtle and Good Pairs

题面:

乌龟会给出一个由小写拉丁字母组成的字符串 s s s

乌龟认为一对整数 ( i , j ) (i, j) (i,j) ( 1 ≤ i < j ≤ n 1 \le i < j \le n 1i<jn ) 是令人愉快的一对,当且仅当存在一个整数 k k k ,使得 i ≤ k < j i \le k < j ik<j 和下面两个条件都成立:

  • s k ≠ s k + 1 s_k \ne s_{k + 1} sk=sk+1 ;
  • s k ≠ s i s_k \ne s_i sk=si s k + 1 ≠ s j s_{k + 1} \ne s_j sk+1=sj

此外,乌龟认为一对整数 ( i , j ) (i, j) (i,j) ( 1 ≤ i < j ≤ n 1 \le i < j \le n 1i<jn )是一对好数,当且仅当 s i = s j s_i = s_j si=sj ( i , j ) (i, j) (i,j) 是一对令人愉快的数。

乌龟想给字符串 s s s 重新排序,以便使好的配对数最大。请帮帮他!

思路:

鸽巢原理好题。

这题其实看明白的话,其实就是在说像是aaabb这种,前面一部分都是一个字符,后面一部分都是另一个字符的子串不算数。所以我们尽可能把相同的字符隔开,变成像是ababa这种形式就好了。

我们把奇数位置看成鸽巢,把字符看成鸽子,其实就是往鸽巢里塞鸽子(塞满奇数位置剩下的依次放入偶数位置即可),这就是一个鸽巢原理。

所以我们把所有字符和它们出现的次数处理出来,按照出现次数排序。然后将字符一个一个依次放入奇数位置和偶数位置即可。

code:

#include <iostream>
#include <cstdio>
#include <map>
#include <cstring>
using namespace std;int T,n;
string s;int main(){cin>>T;while(T--){cin>>n>>s;map<char,int> mp;multimap<int,char> rmp;for(int i=0;i<n;i++)mp[s[i]]++;for(auto [ch,cnt]:mp)rmp.insert(pair<int,char>(cnt,ch));for(int i=0;i<n;i+=2){char ch=rmp.begin()->second;
//			cout<<ch<<" "<<mp.size()<<" "<<rmp.size()<<endl;s[i]=ch;mp[ch]--;if(mp[ch]==0){mp.erase(ch);rmp.erase(rmp.begin());}}for(int i=1;i<n;i+=2){char ch=rmp.begin()->second;s[i]=ch;mp[ch]--;if(mp[ch]==0){mp.erase(ch);rmp.erase(rmp.begin());}}cout<<s<<endl;}return 0;
}

D1. Turtle and a MEX Problem (Easy Version)

题面:

两个版本是不同的问题。在这个版本的问题中,你可以两次或多次选择同一个整数。只有两个版本的问题都解决了,你才能进行破解。

有一天,乌龟在玩 n n n 个序列。假设第 i i i 个序列的长度为 l i l_i li 。那么第 i i i 个序列是 a i , 1 , a i , 2 , … , a i , l i a_{i, 1}, a_{i, 2}, \ldots, a_{i, l_i} ai,1,ai,2,,ai,li .

小猪在乌龟玩耍的时候给乌龟出了一道难题。问题的陈述是

  • 一开始有一个非负整数 x x x 。小乌龟要对这个整数进行任意次数(可能是零)的运算。
  • 在每次运算中,乌龟可以选择一个整数 i i i ,使得 1 ≤ i ≤ n 1 \le i \le n 1in ,并将 x x x 设为 mex † ( x , a i , 1 , a i , 2 , … , a i , l i ) \text{mex}^{\dagger}(x, a_{i, 1}, a_{i, 2}, \ldots, a_{i, l_i}) mex(x,ai,1,ai,2,,ai,li)
  • 乌龟被要求找出答案,即进行任意次数运算后 x x x最大值。

乌龟毫不费力地解决了上述问题。他将 f ( k ) f(k) f(k) 定义为当 x x x 的初始值为 k k k 时上述问题的答案。

然后,小猪给了乌龟一个非负整数 m m m ,让乌龟找出 ∑ i = 0 m f ( i ) \sum\limits_{i=0}^m f(i) i=0mf(i) 的值(即 f ( 0 ) + f ( 1 ) + … + f ( m ) f(0) + f(1) + \ldots + f(m) f(0)+f(1)++f(m) 的值)。不幸的是,他无法解决这个问题。请帮帮他!

† mex ( c 1 , c 2 , … , c k ) ^{\dagger}\text{mex}(c_1, c_2, \ldots, c_k) mex(c1,c2,,ck) 被定义为在序列 c c c 中不出现的最小非负整数 x x x 。例如, mex ( 2 , 2 , 0 , 3 ) \text{mex}(2, 2, 0, 3) mex(2,2,0,3) 1 1 1 mex ( 1 , 2 ) \text{mex}(1, 2) mex(1,2) 0 0 0

思路:

不难发现一个性质,假设一个序列最小未出现的非负整数为 m e x 1 mex1 mex1,第二小未出现的非负整数为 m e x 2 mex2 mex2,那么只要这个数不是 m e x 1 mex1 mex1,做一次运算的结果就是 m e x 1 mex1 mex1,做两次运算的结果就是 m e x 2 mex2 mex2。每个序列最大能 m e x mex mex 到的只能是到 m e x 2 mex2 mex2

所以我们只需要找到所有序列最大的 m e x 2 mex2 mex2,让小于 m e x 2 mex2 mex2 的数都变成 m e x 2 mex2 mex2,这样 f ( 0 ) + f ( 1 ) + … + f ( m ) = m e x 2 + m e x 2 + ⋯ + m e x 2 + ( m e x 2 + 1 ) + ( m e x 2 + 2 ) + ⋯ + m = ( m e x 2 + 1 ) ∗ m e x 2 + ( m + m e x 2 + 1 ) ∗ ( m − m e x 2 ) / 2 f(0) + f(1) + \ldots + f(m)=mex2+mex2+\dots+mex2+(mex2+1)+(mex2+2)+\dots+m=(mex2+1)*mex2+(m+mex2+1)*(m-mex2)/2 f(0)+f(1)++f(m)=mex2+mex2++mex2+(mex2+1)+(mex2+2)++m=(mex2+1)mex2+(m+mex2+1)(mmex2)/2 就是最大的。

code:

#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
typedef long long ll;int T,n,m,mx; int main(){cin>>T;while(T--){cin>>n>>m;mx=0;for(int i=1,l;i<=n;i++){cin>>l;set<int> S;bool f=false;for(int j=1,t;j<=l;j++){cin>>t;S.insert(t);}for(int j=0;;j++){if(S.find(j)==S.end())if(!f)f=true;else {mx=max(mx,j);break;}}}ll ans=0;if(mx<m)ans=1ll*(mx+1)*mx+1ll*(m-mx)*(m+mx+1)/2;else ans=1ll*mx*(m+1);cout<<ans<<endl;}return 0;
}

D2. Turtle and a MEX Problem (Hard Version)

题面:

两个版本是不同的问题。在这个版本的问题中,你不能两次或多次选择同一个整数。只有两个版本的问题都解决了,你才能进行破解。

有一天,乌龟在玩 n n n 序列。假设第 i i i 个序列的长度为 l i l_i li 。那么第 i i i 个序列是 a i , 1 , a i , 2 , … , a i , l i a_{i, 1}, a_{i, 2}, \ldots, a_{i, l_i} ai,1,ai,2,,ai,li .

小猪在乌龟玩耍的时候给乌龟出了一道难题。问题的陈述是

  • 一开始有一个非负整数 x x x 。小乌龟要对这个整数进行任意次数(可能是零)的运算。
  • 在每一次运算中,乌龟可以选择 i i i 这样一个整数,即 1 ≤ i ≤ n 1 \le i \le n 1in i i i 之前没有被选择,并将 x x x 设置为 mex † ( x , a i , 1 , a i , 2 , … , a i , l i ) \text{mex}^{\dagger}(x, a_{i, 1}, a_{i, 2}, \ldots, a_{i, l_i}) mex(x,ai,1,ai,2,,ai,li)
  • 乌龟被要求找出答案,即进行任意次数运算后 x x x最大值。

乌龟毫不费力地解决了上述问题。他将 f ( k ) f(k) f(k) 定义为当 x x x 的初始值为 k k k 时上述问题的答案。

然后,小猪给了乌龟一个非负整数 m m m ,让乌龟找出 ∑ i = 0 m f ( i ) \sum\limits_{i=0}^m f(i) i=0mf(i) 的值(即 f ( 0 ) + f ( 1 ) + … + f ( m ) f(0) + f(1) + \ldots + f(m) f(0)+f(1)++f(m) 的值)。不幸的是,他无法解决这个问题。请帮帮他!

† mex ( c 1 , c 2 , … , c k ) ^{\dagger}\text{mex}(c_1, c_2, \ldots, c_k) mex(c1,c2,,ck) 定义为序列 c c c 中不出现的最小非负整数 x x x 。例如, mex ( 2 , 2 , 0 , 3 ) \text{mex}(2, 2, 0, 3) mex(2,2,0,3) 1 1 1 mex ( 1 , 2 ) \text{mex}(1, 2) mex(1,2) 0 0 0

思路:

其实不难,但是赛时被前三个题整麻了,就不觉得这个能做上来,结果这个题就赛时坠机了,差一点写出来。

这个题和上一个的区别在于不能对一个序列进行多次 m e x mex mex 运算,只能做一次。还是假设一个序列最小未出现的非负整数为 m e x 1 mex1 mex1,第二小未出现的非负整数为 m e x 2 mex2 mex2。所以对一个序列,我们做一次 m e x mex mex,只要这个数不是一开始就是 m e x 1 mex1 mex1,就会得到 m e x 1 mex1 mex1

但是如果这个数一开始就是 m e x 1 mex1 mex1,这时可以得到 m e x 2 mex2 mex2。或者是有另一个序列的最小未出现的非负整数也是这个 m e x 1 mex1 mex1,那么无论什么数都可以得到 m e x 2 mex2 mex2。其实可以发现一个数变成另一个数的方法就这两种。

我们用一条有向边 m e x 1 → m e x 2 mex1\rightarrow mex2 mex1mex2 表示原本为 m e x 1 mex1 mex1 的数可以直接得到 m e x 2 mex2 mex2。再用一个 m x mx mx 表示所有数都可以变成的最大的 m e x 2 mex2 mex2。那么对一个数,要么不变,要么变成有向边连向的数,要么变成 m x mx mx

可以发现 m e x 2 mex2 mex2 的大小是随着序列长度变化的,它最大就是 l + 1 l+1 l+1,而 ∑ l ≤ 2 × 1 0 5 \sum l\le 2\times 10^5 l2×105,所以 m e x 1 → m e x 2 mex1\rightarrow mex2 mex1mex2 以及 m e x 2 mex2 mex2 最大也就到 2 × 1 0 5 2\times 10^5 2×105。我们可以用 t o to to 数组表示每个数可以变成的最大的数, t o to to 数组有可能发生变化的也只有前 m e x 2 mex2 mex2 的部分。我们处理这部分的 t o to to 数组不会超时。高出的部分直接等差数列求和即可。

code:

#include <iostream>
#include <cstdio>
#include <set>
#include <vector>
#include <queue>
using namespace std;
typedef long long ll;
const int maxn=2e5+5;
typedef pair<int,int> pii;int T,n,m;int top;
pii ttt[maxn];int M;
vector<int> head,d,to;
int ent;
struct edge{int v,nxt;
}e[maxn];
void add(int u,int v){e[++ent]={v,head[u]};head[u]=ent;
}signed main(){cin>>T;while(T--){cin>>n>>m;ent=M=top=0;for(int i=1,l;i<=n;i++){cin>>l;set<int> S;int k1=-1,k2;for(int i=1,t;i<=l;i++){cin>>t;S.insert(t);}for(int j=0;;j++){if(S.find(j)==S.end()){if(!~k1)k1=j;else {k2=j;break;}}}M=max(M,k2);ttt[++top]=pii(k1,k2);}head.resize(M+1);d.resize(M+1);to.resize(M+1);for(int i=0;i<=M;i++)head[i]=d[i]=to[i]=0;for(int i=1;i<=top;i++){int k1=ttt[i].first,k2=ttt[i].second;d[k1]++;add(k1,k2); }for(int u=M;u>=0;u--){to[u]=u;for(int i=head[u],v;i;i=e[i].nxt){v=e[i].v;to[u]=max(to[u],to[v]);}}int mx=0;for(int i=0;i<=M;i++)if(d[i]>1)mx=max(mx,to[i]);else if(d[i]==1)mx=max(mx,i);ll ans=0;for(int i=0;i<=min(M,m);i++){ans+=max(to[i],mx);}if(m>M)ans+=1ll*(m+M+1)*(m-M)/2;cout<<ans<<endl;}return 0;
}

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

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

相关文章

由浅入深学习 C 语言:Hello World【提高篇】

目录 引言 1. Hello World 程序代码 2. C 语言角度分析 Hello World 程序 2.1. 程序功能分析 2.2 指针 2.3 常量指针 2.4 指针常量 3. 反汇编角度分析 Hello World 程序 3.1 栈 3.2 函数用栈传递参数 3.3 函数调用栈 3.4 函数栈帧 3.5 相关寄存器 3.6 相关汇编指令…

一些好用的网站和api合集

title: 集合一些好用的网站和api tags: 笔记收集 文章目录 内容先写这么多吧 以后有再加上去有好用的评论区也可以分享一下网站集合软件集合接口集合ONE金山词霸扇贝单词一言今日诗词Storm 往期内容基础库HAL cubemax VSCODE GCC 内容 这是一个关于一些网站的分享方便自己好…

速盾:深度解析云CDN及应用

云CDN&#xff08;Content Delivery Network&#xff09;是一种利用分布式节点服务器提供内容分发服务的技术。它能够将静态和动态的内容分发到离用户最近的服务器节点&#xff0c;从而提高用户访问速度和体验。云CDN在现代互联网应用中扮演着重要的角色&#xff0c;本文将深入…

优化学习管理:Moodle和ONLYOFFICE文档编辑器的完美结合

目录 前言 一、什么是 Moodle 1、简单快速插入表单字段 3、免费表单模板库 4、开启无缝协作 三、在Moodle中集成ONLYOFFICE文档 四、在Moodle安装使用ONLYOFFICE 1、下载安装 2、配置服务器 3、在Moodle中使用ONLYOFFICE 文档活动 五、未来展望 写在最后 前言 在当今教育科技飞…

C++(this指针/常函数与常对象/拷贝构造函数/赋值函数/静态成员/静态成员函数/单列模式)

一、this指针与常函数 成员函数是如何区别调用它的对象&#xff1f; #include <iostream> using namespace std; ​ class Test {const int num; public:Test(int num):num(num) {}void show(void){cout << num << " " << &num <&l…

Leetcode Hot 100刷题记录 -Day3(双指针)

移动零 问题描述&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2:…

Qt杂项功能实现

本文介绍Qt杂项功能实现。 1.隐藏鼠标指针 1)整个应用程序都不显示鼠标指针 可在“QApplication a(argc, argv);”之后添加&#xff1a; QApplication::setOverrideCursor(Qt::BlankCursor); 这在带触摸屏的应用中非常有用。 2)某个窗口不显示鼠标指针 可在窗口的构造函…

JVM垃圾回收算法:标记-清除算法 、复制算法、 标记-整理算法、 分代收集算法

文章目录 引言I 标记回收算法(Mark-Sweep)算法不足II 复制算法(Copying)III 标记整理算法(Mark-Compact)IV 分代收集(以上三种算法的集合体)内存划分新生代算法:Minor GC老年代算法V 查看JVM堆分配引言 垃圾回收(Garbage Collection,GC) Java支持内存动态分配、…

Flask+LayUI开发手记(六):树型表格的增删改查

树型表格的增删改查功能与数据表格的是完全一致&#xff0c;就是调用layui-form表单组件实现数据输入再提交&#xff0c;比较大的区别是树型节点的编辑&#xff0c;都需要有上级节点的输入&#xff0c;而这个上级节点的展示&#xff0c;必须是以树型方式展示出来。当然&#xf…

【大数据】Kaggle:数据科学家的竞技场与学习平台

文章目录 一、引言二、Kaggle是什么&#xff1f;Kaggle的核心特点包括&#xff1a; 三、Kaggle的用途四、如何使用Kaggle1. 注册账号2. 探索竞赛3. 下载数据集4. 使用Kernels5. 参与论坛讨论 五、Kaggle的高级功能1. Kaggle Kernels2. 数据集3. 论坛 六、Kaggle在教育和企业中的…

语音控制开关的语音识别ic芯片方案

语音控制开关是一种基于语音识别技术的设备&#xff0c;它通过内置的语音识别芯片&#xff0c;将用户的语音指令转化为电信号&#xff0c;从而实现对设备的控制。例如在智能家居设备上的应用&#xff0c;通常需要连接到家庭的Wi-Fi网络上&#xff0c;以便与智能手机或智能音箱等…

python os获取当前git目录的git用户

要获取当前目录下的 Git 用户配置&#xff08;即用户名称和电子邮件&#xff09;&#xff0c;你可以结合操作系统命令和 git 命令来完成这一任务。以下是使用 Python 的 os 模块和 subprocess 模块来获取当前 Git 目录的用户配置的示例代码&#xff1a; 使用 Python 脚本&…

golang RSA 解密前端jsencrypt发送的数据时异常 crypto/rsa: decryption error 解决方法

golang中 RSA解密前端&#xff08;jsencrypt&#xff09;发来的密文后出现 "crypto/rsa: decryption error" &#xff0c; 这个问题首先需要确认你的私匙和公匙是否匹配&#xff0c; 如果匹配 那检查入参数据类型&#xff0c; 前端发送来的rsa加密后的数据一般都是…

bbr 随机 phase 的麻烦与 inflight 守恒算法的动机

bbr 有个要点&#xff0c;要把 probebw 的 phase 错开&#xff1a; static void bbr_reset_probe_bw_mode(struct sock *sk) {struct bbr *bbr inet_csk_ca(sk);bbr->mode BBR_PROBE_BW;bbr->cycle_idx CYCLE_LEN - 1 - prandom_u32_max(bbr_cycle_rand);bbr_advance…

【Java设计模式】集合管道模式:简化数据操作

文章目录 【Java设计模式】集合管道模式&#xff1a;简化数据操作一、概述二、集合管道设计模式的意图三、集合管道模式的详细解释及实际示例四、Java中集合管道模式的编程示例五、何时在Java中使用集合管道模式六、集合管道模式在Java中的实际应用七、集合管道模式的优点和权衡…

【封装自己的库】

封装自己的库 课前准备 工具 编辑器 VSCode浏览器 Chorme 前置知识 Js基本知识 课堂主题 一、定义函数返还JQ对象 二、ready方法和原生节点处理 三、选择器器封装 四、封装JQ的eq方法 五、封装JQ的click方法 六、jQ中的链式操作 七、封装JQ的css方法 八、cssHooks扩…

Java项目:基于SpringBoot+mysql在线拍卖系统(含源码+数据库+答辩PPT+毕业论文)

一、项目简介 本项目是一套基于SSM框架mysql在线拍卖系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功能齐全、…

Java 面试题:HTTP版本演变--xunznux

文章目录 HTTP版本演变HTTP/0.9HTTP/1.0HTTP/1.1新引入&#xff1a;问题&#xff1a;长连接是什么&#xff1a;管道网络传输&#xff1a;队头阻塞是什么&#xff1f;解决http队头阻塞的方法&#xff1a;HTTP1.1常见性能问题为解决HTTP1.1性能问题而提出的常见优化手段 HTTP/21、…

【河北航空-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

RS485与USB3.1电路

USB2.0最高也就480M&#xff0c;而USB3.0轻松到达5Gbps&#xff1a; DTU远程控制&#xff1a; DTU&#xff08;数据传输单元&#xff09;通常用于将数据从现场设备传输到远程服务器&#xff0c;常用于物联网、工业控制、远程监控等场景。它可以通过GPRS/4G、Wi-Fi、以太网等方…