当前位置: 首页 > news >正文

牛客周赛59(A,B,C,D,E二维循环移位,F范德蒙德卷积)

比赛链接

官方讲解

很幸运参加了内测,不过牛客这消息推送天天发广告搞得我差点错过内测消息,差点进小黑屋,好在开赛前一天看到了。

这场不难,ABC都很签到,D是个大讨论,纯屎,E是需要对循环移位进行处理和转化,转化后很简单,如果看不懂我写的可以看官方的讲解,画图可能会比较好理解,F是数学,需要分开计算贡献,最后再来一步范德蒙德卷积优化,知识点不难就是比较冷门。


A TD

思路:

签到

code:

#include <iostream>
#include <cstdio>
using namespace std;int a,b;int main(){cin>>a>>b;cout<<1.0*a/b;return 0;
}

B 你好,这里是牛客竞赛

思路:

如果是以 https://www.nowcoder.com 或者 www.nowcoder.com 作为前缀开头的话,那就是牛客主站,输出 Nowcoder。如果是以 https://ac.nowcoder.com 或者 ac.nowcoder.com 作为前缀开头的话,那就是牛客竞赛,输出 Ac。剩下的就是其他网站。

找子串可以用 s t r i n g string string 自带的 f i n d find find 方法,它会返回第一个匹配的子串的下标,作为前缀开头的话就看 f i n d find find 的值是否为 0 0 0 即可,是 0 0 0 就说明一开始就匹配上了,也就是前缀。

code:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;int T;
string s;int main(){cin>>T;while(T--){cin>>s;if(s.find("https://ac.nowcoder.com")==0 || s.find("ac.nowcoder.com")==0)cout<<"Ac"<<endl;else if(s.find("https://www.nowcoder.com")==0 || s.find("www.nowcoder.com")==0)cout<<"Nowcoder"<<endl;else cout<<"No"<<endl;}return 0;
}

C 逆序数

思路:

一个序列里对任意的一对数只有正序和逆序两种关系,不是逆序就是正序。在一个序列里任取两个数的取法有 C n 2 = n ∗ ( n − 1 ) 2 C_n^2=\dfrac{n*(n-1)}2 Cn2=2n(n1) 种可能,也就是一共有这么多个关系,除了 k k k 个逆序,剩下的就有 n ∗ ( n − 1 ) 2 − k \dfrac{n*(n-1)}2-k 2n(n1)k 个正序。

而翻转之后,正序就会变成逆序,逆序变成正序,不管你这个集合是怎么凑的,翻转之前是 k k k 个逆序, n ∗ ( n − 1 ) 2 − k \dfrac{n*(n-1)}2-k 2n(n1)k 个正序,翻转之后就是 n ∗ ( n − 1 ) 2 − k \dfrac{n*(n-1)}2-k 2n(n1)k 个逆序, k k k 个正序。

code:

#include <iostream>
#include <cstdio>
using namespace std;long long n,k;int main(){cin>>n>>k;cout<<n*(n-1)/2-k<<endl;return 0;
}

D 构造mex

思路:

我嘞个大讨论啊,屎题。我已经能预想到那好看的通过率了。

我讨论的方法如下:

  1. k = 0 k=0 k=0 时,就尽量让每个数都是 1 1 1,最后一个数放剩余的还没用掉的值。
    1. s < n s<n s<n 时,这时甚至做不到让每个位置都是 1 1 1,一定会有位置为 0 0 0,因此无解
    2. s ≥ n s\ge n sn 时,就可以用上面的思路来凑。
  2. k ≠ 0 k\not=0 k=0 时,先凑出 0 , 1 , 2 , … , k − 1 0,1,2,\dots,k-1 0,1,2,,k1,这样 m e x mex mex 就等于 k k k 了,然后再把剩余的值放在后面,剩余位置就都放 0 0 0。前面 0 , 1 , 2 , … , k − 1 0,1,2,\dots,k-1 0,1,2,,k1 一共 k k k 个数,总和为 t o t = k ∗ ( k − 1 ) 2 tot=\dfrac{k*(k-1)}2 tot=2k(k1)
    1. 有可能 s < t o t s<tot s<tot,这时连前面的 k k k 个数都凑不出来,因此无解。
    2. 有可能 s = t o t s=tot s=tot,这时正好没有剩余的数,因此凑出前 k k k 个数后后面都可以补 0 0 0
      1. 当位置个数 n < k n<k n<k 时,位置不够,因此无解。
      2. n ≥ k n\ge k nk 时,位置够,用上面的方法来凑。
    3. 有可能 s − t o t = k s-tot=k stot=k,这时不能直接把剩余的值 s − t o t s-tot stot 放在后面,必须先拆出一个单独的 1 1 1 ,然后再把 s − t o t − 1 s-tot-1 stot1 放下,后面补 0 0 0
      1. 有可能 s − t o t = k = 1 s-tot=k=1 stot=k=1,这时做不到先拆出一个单独的 1 1 1 ,然后再把 s − t o t − 1 s-tot-1 stot1 放下,因为也会冲突,这时无解。
      2. 有可能位置个数不够,即 n < k + 2 n<k+2 n<k+2,这时无解
      3. 剩余情况,按上面的方法来凑。
    4. 按上面的方法来凑需要至少 k + 1 k+1 k+1 个位置,如果位置不够则无解,否则按上面的方法来凑。

code:

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;ll T,s,n,k;int main(){cin>>T;while(T--){cin>>s>>n>>k;if(k==0){if(s<n)cout<<"NO"<<endl;else {cout<<"YES"<<endl;cout<<s-n+1<<" ";for(int i=1;i<=n-1;i++)cout<<1<<" ";cout<<endl;}}else {ll tot=k*(k-1)/2;if(s<tot)cout<<"NO"<<endl;else {if(k==1 && s-tot==1)cout<<"NO"<<endl;else {if(s-tot==0){if(n<k)cout<<"NO"<<endl;else {cout<<"YES"<<endl;for(int i=0;i<k;i++)cout<<i<<" ";for(int i=k+1;i<=n;i++)cout<<0<<" ";cout<<endl;}}else if(s-tot==k){if(n<k+2)cout<<"NO"<<endl;else {cout<<"YES"<<endl;for(int i=0;i<k;i++)cout<<i<<" ";cout<<1<<" "<<s-tot-1<<" ";for(int i=k+3;i<=n;i++)cout<<0<<" ";cout<<endl;}}else {if(n<k+1)cout<<"NO"<<endl;else {cout<<"YES"<<endl;for(int i=0;i<k;i++)cout<<i<<" ";cout<<s-tot<<" ";for(int i=k+2;i<=n;i++)cout<<0<<" ";cout<<endl;}}}}}}return 0;
}

E 小红的X型矩阵

思路:

对一个正方形,我们可以统计出它两个对角线上有多少个 1 1 1,对角线上的位置总个数减去对角线上 1 1 1 的个数就是对角线上 0 0 0 的个数,也就是需要用操作 1 1 1 0 0 0 翻转成 1 1 1 的次数。然后再统计出一共有多少个 1 1 1,减去对角线上 1 1 1 的个数就是对角线以外其他位置上 1 1 1 的个数,也就是需要需要用操作 1 1 1 1 1 1 翻转成 0 0 0 的次数。这个快速统计对角线上 1 1 1 的个数可以用斜着的前缀和来做。

这个循环移动我们可以看作是移动这两个对角线,但是我们对角线一旦循环移动了就会断成两段,就很难计数了,而且对于 n n n 为奇数的情况,两个对角线还会有交点,我们交点只能算一次,但是用前缀和来快速计数就会算两次,很麻烦。

这时我们可以参考数组的循环移位,把数组复制一遍到后面。我们可以把这个正方形往 x , y x,y xy 轴各复制一遍,这样从 ( i , j ) (i,j) (i,j) ( i + n − 1 , j + n − 1 ) (i+n-1,j+n-1) (i+n1,j+n1) 的这个矩形就相当于原矩形向左循环移位 i − 1 i-1 i1 次,向上循环移位 j − 1 j-1 j1 次。

我们枚举矩形的左上角坐标 ( i , j ) (i,j) (i,j),这样对每一个正方形都对应一个循环移位后的正方形,统计所有正方形的答案,然后取最小值即可。

注意 n n n 为奇数的时候,中间会有一个交点,前缀和对两个对角线计数会重复算一次,需要减掉。

code:

#include <iostream>
#include <cstdio>
using namespace std;
const int maxn=1005;int n,a[maxn<<1][maxn<<1],s1[maxn<<1][maxn<<1],s2[maxn<<1][maxn<<1],tot;int main(){cin>>n;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){cin>>a[i][j];tot+=a[i][j];a[i+n][j]=a[i][j+n]=a[i+n][j+n]=a[i][j];}for(int i=1;i<=2*n;i++)for(int j=1;j<=2*n;j++)s1[i][j]=s1[i-1][j-1]+a[i][j];for(int i=1;i<=2*n;i++)for(int j=1;j<=2*n;j++)s2[i][j]=s2[i-1][j+1]+a[i][j];int ans=1e9;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){//枚举左上角坐标 int t=0,t1=s1[i+n-1][j+n-1]-s1[i-1][j-1],t2=s2[i+n-1][j]-s2[i-1][j+n];t=t1+t2;if(n&1){t-=a[i+n/2][j+n/2];ans=min(ans,(2*n-1)-t+tot-t);}else {ans=min(ans,2*n-t+tot-t);}}cout<<ans<<endl;return 0;	
}

F 小红的数组回文值

思路:

内测时写了一个很神秘的暴力,结果过了,然后被加强数据卡死了。。。这个暴力其实本质上和正解差不多,就差一个范德蒙德卷积优化kuso。

这个题是求所有子序列的回文值,但是我们显然不可能枚举出所有的子序列,所以我们不妨转化一下视角,看每一对数的贡献。

当一对数不同,并且在某一个回文串中正好对应,那么它就会产生一次贡献,假设第 i i i 个位置和第 j j j 个位置的数在某一个回文串中对应,并且 a i ≠ a j a_i\not=a_j ai=aj。怎么算出所有满足这两个数对应的回文串呢?

我们可以在前 i − 1 i-1 i1 个位置和后 n − j n-j nj 个位置同时选出 k k k 个数,在中间的 j − i − 1 j-i-1 ji1 个数中选若干个数,这样就凑出一个 a i a_i ai a j a_j aj 对应的回文串了。

假设前后各有 x , y x,y x,y 个数,也就是 x = i − 1 , y = n − j x=i-1,y=n-j x=i1,y=nj,那么选取的方案数就是 ∑ k = 0 m i n { x , y } C x k ∗ C y k ∗ 2 n − x − y − 2 \sum_{k=0}^{min\{x,y\}} C_x^k*C_y^k*2^{n-x-y-2} k=0min{x,y}CxkCyk2nxy2

因为 n = 2000 n=2000 n=2000,所以我们可以枚举 i , j i,j i,j,算出对应的 x , y x,y x,y,然后再枚举 k k k。这样就是一个 O ( n 3 ) O(n^3) O(n3) 的算法,会 T T T,但是如果我们如果能把枚举 k k k 的过程优化掉,就可以压成 O ( n 2 ) O(n^2) O(n2) 的了。

还真能, 2 n − x − y − 2 2^{n-x-y-2} 2nxy2 k k k 无关,可以提出来,前面的这个 ∑ k = 0 m i n { x , y } C x k ∗ C y k \sum_{k=0}^{min\{x,y\}} C_x^k*C_y^k k=0min{x,y}CxkCyk,我们不妨设 x < y x<y x<y(不然就交换 x , y x,y x,y),则 = ∑ k = 0 x C x k ∗ C y k = ∑ k = 0 x C x x − k ∗ C y k =\sum_{k=0}^{x} C_x^k*C_y^k=\sum_{k=0}^{x} C_x^{x-k}*C_y^k =k=0xCxkCyk=k=0xCxxkCyk 这一步可以通过范德蒙德卷积优化,得到 = C x + y x =C_{x+y}^{x} =Cx+yx。范德蒙德卷积讲解可以看 OI wiki。

code:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
const int maxn=2e3+5;
typedef long long ll;
const ll mod=1e9+7;int n,a[maxn];
ll qpow(ll a,ll b){ll ans=1,base=a%mod;b%=mod;while(b){if(b&1)ans=ans*base%mod;base=base*base%mod;b>>=1;}return ans;
}
ll inv(ll x){return qpow(x,mod-2);}ll fac[maxn],ifac[maxn];
ll C(ll x,ll y){//C_x^yif(x<y)return 0;return fac[x]*ifac[y]%mod*ifac[x-y]%mod;
}ll calc(ll x,ll y){if(x>y)swap(x,y);return qpow(2,n-x-y-2)*C(x+y,x)%mod;
}int main(){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];fac[0]=1;for(int i=1;i<=2000;i++)fac[i]=fac[i-1]*i%mod;ifac[2000]=inv(fac[2000]);for(int i=2000;i>=1;i--)ifac[i-1]=ifac[i]*i%mod;ll ans=0;for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)if(a[i]!=a[j])ans=(ans+calc(i-1,n-j));cout<<(ans%mod+mod)%mod<<endl;return 0;
}

内测时成功卡AC的 O ( n 3 ) O(n^3) O(n3) 暴力代码(虽然最后还是被卡掉了):

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
const int maxn=2e3+5;
typedef long long ll;
const ll mod=1e9+7;int n,a[maxn],b[maxn];
ll qpow(ll a,ll b){ll ans=1,base=a%mod;b%=mod;while(b){if(b&1)ans=ans*base%mod;base=base*base%mod;b>>=1;}return ans;
}
ll inv(ll x){return qpow(x,mod-2);}ll fac[maxn],ifac[maxn];
ll C(ll x,ll y){//C_x^yif(x<y)return 0;return fac[x]*ifac[y]%mod*ifac[x-y]%mod;
}vector<int> c[maxn];ll calc(ll x,ll y){ll ans=0;for(int i=0;i<=min(x,y);i++)ans=(ans+C(x,i)*C(y,i))%mod;return qpow(2,n-x-y-2)*ans%mod;
}int main(){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];memcpy(b,a,sizeof(b));sort(b+1,b+n+1);int tot=unique(b+1,b+n+1)-b-1;auto find=[&](int x)->int{return lower_bound(b+1,b+n+1,x)-b;};for(int i=1;i<=n;i++)a[i]=find(a[i]);for(int i=1;i<=n;i++)c[a[i]].push_back(i);fac[0]=1;for(int i=1;i<=2000;i++)fac[i]=fac[i-1]*i%mod;ifac[2000]=inv(fac[2000]);for(int i=2000;i>=1;i--)ifac[i-1]=ifac[i]*i%mod;ll ans=0;for(int i=1;i<=n;i++){ans=(ans+C(n,i)*(i/2)%mod)%mod;}for(int i=1;i<=n;i++){for(int l=0;l<c[i].size();l++)for(int r=l+1;r<c[i].size();r++){ans=(ans-calc(c[i][l]-1,n-c[i][r]))%mod;}}cout<<(ans%mod+mod)%mod<<endl;return 0;
}

相关文章:

牛客周赛59(A,B,C,D,E二维循环移位,F范德蒙德卷积)

比赛链接 官方讲解 很幸运参加了内测&#xff0c;不过牛客这消息推送天天发广告搞得我差点错过内测消息&#xff0c;差点进小黑屋&#xff0c;好在开赛前一天看到了。 这场不难&#xff0c;ABC都很签到&#xff0c;D是个大讨论&#xff0c;纯屎&#xff0c;E是需要对循环移位…...

C语言中的隐型计算

隐型计算&#xff08;Implicit Computation&#xff09;是C语言中一个不易察觉的特性&#xff0c;它发生在类型转换和操作顺序不明确的场合。隐型计算可能导致数据溢出、精度丢失或者不正确的结果。 例如&#xff0c;当你在一个int类型和unsigned类型混合的表达式中使用时&…...

ffmpeg面向对象-待定

1.常用对象 rtsp拉流第一步都是avformat_open_input&#xff0c;其入参可以看下怎么用&#xff1a; AVFormatContext *fmt_ctx NULL; result avformat_open_input(&fmt_ctx, input_filename, NULL, NULL);其中fmt_ctx 如何分配内存的&#xff1f;如下 int avformat_ope…...

大厂嵌入式数字信号处理器(DSP)面试题及参考答案

什么是模拟信号处理和数字信号处理(DSP)在嵌入式系统中的应用? 模拟信号处理是对连续变化的模拟信号进行操作和处理。在嵌入式系统中,模拟信号处理的应用包括传感器信号的调理,例如温度传感器、压力传感器等输出的模拟信号通常比较微弱且可能受到噪声干扰,需要通过放大器…...

GC-分代收集器

GC收集器介绍 十款GC收集器 上图中共有十款GC收集器&#xff0c;它们可以根据回收时的属性分为分代和分区两种类型&#xff1a; 分代收集器&#xff1a;Serial、ParNew、Parallel Scavenge、CMS、Serial Old&#xff08;MSC&#xff09;、Parallel Old 分区收集器&#xff…...

C++从入门到起飞之——priority_queue(优先级队列) 全方位剖析!

&#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1、priority_queue的介绍 2、priority_queue的使用 3、priority_queue的模拟实现 3.1、仿函数的介…...

[数据集][目标检测]西红柿缺陷检测数据集VOC+YOLO格式17318张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;17318 标注数量(xml文件个数)&#xff1a;17318 标注数量(txt文件个数)&#xff1a;17318 标…...

【小沐学OpenGL】Ubuntu环境下glut的安装和使用

文章目录 1、简介1.1 OpenGL简介1.2 glut简介1.3 freeglut 2、glut安装2.1 命令安装glut2.2 源码安装glut 3、glut测试3.1 测试1&#xff0c;版本打印3.2 测试2&#xff0c;绘制三角形3.3 测试3&#xff0c;VBO绘制三角形 结语 1、简介 1.1 OpenGL简介 OpenGL作为图形界的工业…...

ROS 发行版 jazzy 加载urdf 渲染到 RVIZ2

新版启动urdf需要两个包分别为urdf_tutorial、urdf_launch 配置package.xml <exec_depend>rviz_common</exec_depend> <exec_depend>rviz_default_plugins</exec_depend> <exec_depend>rviz2</exec_depend> <exec_depend>robot…...

SpringBoot中利用EasyExcel+aop实现一个通用Excel导出功能

一、结果展示 主要功能&#xff1a;可以根据前端传递的参数&#xff0c;导出指定列、指定行 1.1 案例一 前端页面 传递参数 {"excelName": "导出用户信息1725738666946","sheetName": "导出用户信息","fieldList": [{&q…...

排序链表(归并排序)

148. 排序链表 - 力扣&#xff08;LeetCode&#xff09; 以O(nlogn)时间复杂度&#xff0c; O(1)空间复杂度 排序链表 涉及知识点&#xff1a; 找到链表的中间节点 2095. 删除链表的中间节点 - 力扣&#xff08;LeetCode&#xff09;合并有序链表 21. 合并两个有序链…...

Adobe After Effects的插件--------CC Particle World

CC Particle World是一个粒子效果器,用于在三维空间中生成和模拟各种粒子系统,包括火焰、雨、雪、爆炸、烟雾等等。它会自动随时间变化发射粒子。 本文部分参照 https://www.163.com/dy/article/IEJVDN760536FE6V.html 使用条件 使用该插件的图层需是2D图层。 我们新建一个…...

电脑硬盘数据丢失了怎么恢复?简单实用的硬盘数据找回的方法

我们的电脑使用硬盘作为存储设备来保存数据&#xff0c;硬盘里的数据是存储在扇区上&#xff0c;这些存储数据的单元则位于表面有磁性材料的旋转的盘片上。硬盘内部的磁头悬浮于高速旋转的盘片上&#xff0c;用于读写和检索数据。 假如我们使用电脑时不小心删除了某个文件&…...

k8s调度(pod亲和、反亲和、污点、容忍度)

pod亲和性 针对对象为Pod&#xff0c;目的是实现&#xff0c;新建Pod和目标Pod调度到一起&#xff0c;在同一个Node上。 示例&#xff1a; apiVersion: v1 kind: Pod metadata:name: testpod01labels:app: myapp01env: test1 spec:containers:- name: testpod01image: nginx:…...

智能制造核心领域:自动化、物联网、大数据分析、人工智能在现代制造业中的应用与融合

一、智能制造系统及领域 智能制造系统是一套集成的解决方案&#xff0c;它利用物联网&#xff08;IoT&#xff09;、大数据分析、人工智能&#xff08;AI&#xff09;、机器学习和云计算等技术&#xff0c;实现工厂和生产线的自动化、数据驱动和智能化。这些系统能够监控和控制…...

Android Studio 2024最新版Hello World

Android Studio 2024最新版Hello World 1. Android Studio 2024安装视频2. 创建项目Read Timed out 问题Android Studio Build Output 控制台中文乱码问题 3. 驱动管理 本文章介绍如何通过Android Studio 2024最新版创建项目&#xff0c; 并成功输出Hello World。 本次教程版本…...

请解释Java中的CountDownLatch和CyclicBarrier的区别和使用场景。什么是Java中的Semaphore?它如何控制并发访问?

请解释Java中的CountDownLatch和CyclicBarrier的区别和使用场景。 CountDownLatch 和 CyclicBarrier 是 Java 并发包&#xff08;java.util.concurrent&#xff09;中提供的两个非常有用的同步工具&#xff0c;它们都用于控制多个线程之间的同步&#xff0c;但它们的目的和使用…...

Django+Vue3前后端分离学习(五)(前端登录页面搭建)

1、如果需要使用组合式API&#xff0c;需要安装插件&#xff1a; npm install vite-plugin-vue-setup-extend --save-dev 在vite.config.js里配置&#xff1a; 首先导入: import VueSetupExtend from vite-plugin-vue-setup-extend 添加&#xff1a; 2、创建login.vue 然…...

虚拟机安装macos系统

虚拟机安装macOS系统是一个相对复杂但可行的过程&#xff0c;主要涉及前期准备、虚拟机软件安装、macOS镜像准备、虚拟机配置、系统安装及后续设置等多个步骤。以下是一个详细的教程&#xff0c;帮助您在虚拟机中成功安装macOS系统。 一、前期准备 1. 硬件要求 确保您的计算…...

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态&#xff0c;生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案&#xff0c;则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时&#x…...

828华为云征文|使用sysbench对Mysql应用加速测评

文章目录 ❀前言❀测试环境准备❀测试工具选择❀测试工具安装❀mysql配置❀未开启Mysql加速测试❀开启Mysql加速测试❀总结 ❀前言 大家好&#xff0c;我是早九晚十二。 昨天有梳理一篇关于华为云最新推出的云服务器产品Flexus云服务器X。当时有说过&#xff0c;这次的华为云F…...

2024 年高教社杯全国大学生数学建模竞赛题目——D 题 反潜航空深弹命中概率问题的求解

2024 年高教社杯全国大学生数学建模竞赛题目 &#xff08;请先阅读“ 全国大学生数学建模竞赛论文格式规范 ”&#xff09; D 题 反潜航空深弹命中概率问题 应用深水炸弹&#xff08;简称深弹&#xff09;反潜&#xff0c;曾是二战时期反潜的重要手段&#xff0c;而随着现代军…...

【Kubernetes】常见面试题汇总(一)

目录 1.简述 etcd 及其特点&#xff1f; 2.简述 etcd 适应的场景&#xff1f; 3.简述什么是Kubernetes&#xff1f; 4.简述 Kubernetes和 Docker的关系&#xff1f; 1.简述 etcd 及其特点&#xff1f; &#xff08;1&#xff09;etcd 是Core0s 团队发起的开源项目&#xf…...

简单实用的php全新实物商城系统

免费开源电商系统,提供灵活的扩展特性、高度自动化与智能化、创新的管理模式和强大的自定义模块,让电商用户零成本拥有安全、高效、专业的移动商城。 代码是全新实物商城系统源码版。 代码下载...

Leetcode面试经典150题-128.最长连续序列-递归版本另解

之前写过一篇这个题的&#xff0c;但是可能代码比较复杂&#xff0c;这回来个简洁版的&#xff0c;这个是递归版本 可以看看之前的版本&#xff0c;两个版本面试用哪个都保过 解法都在代码里&#xff0c;不懂就留言或者私信 class Solution {/**对于之前的解法&#xff0c;我…...

spring security 中的授权使用

一、认证 身份认证&#xff0c;就是判断一个用户是否为合法用户的处理过程。Spring Security 中支持多种不同方式的认证&#xff0c;但是无论开发者使用那种方式认证&#xff0c;都不会影响授权功能使用。因为 SpringSecurity 很好做到了认证和授权解耦。 二、授权 授权&#x…...

python安装以及访问openAI API

安装python 我是python小白&#xff0c;所以需要一步一步来&#xff0c;先安装。 一口吃不成胖子&#xff0c;记住。 从官网下载python&#xff0c;目前最新版本是3.12&#xff0c;但是据说稳定版3.11更好一点&#xff0c;所以&#xff0c;下载3.11&#xff0c;注意不要下载…...

【Unity小技巧】URP管线遮挡高亮效果

前言 在URP渲染管线环境下实现物体遮挡高亮显示效果&#xff0c;效果如下&#xff1a;Unity URP遮挡高亮 实现步骤 创建层级&#xff0c;为需要显示高亮效果的物体添加层级&#xff0c;比如Player 创建一个材质球&#xff0c;也就是高亮效果显示的材质球找到Universal Render…...

C#中的GDI和GDI+(Graphics Device Interface Plus)图形设备接口

GDI的概念 GDI&#xff08;Graphics Device Interface&#xff09;是微软Windows操作系统中的一个组件&#xff0c;它提供了一组API&#xff0c;用于在显示器或打印机等图形设备上进行图形绘制和图像处理。GDI 是 Windows 编程中用于二维图形和图像处理的接口。 GDI 的主要功…...

谷粒商城のNginx

文章目录 前言一、Nginx1、安装Nginx2、相关配置2.1、配置host2.2、配置Nginx2.3、配置网关 前言 本篇重点介绍项目中的Nginx配置。 一、Nginx 1、安装Nginx 首先需要在本地虚拟机执行&#xff1a; mkdir -p /mydata/nginx/html /mydata/nginx/logs /mydata/nginx/conf在项目…...