牛客周赛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∗(n−1) 种可能,也就是一共有这么多个关系,除了 k k k 个逆序,剩下的就有 n ∗ ( n − 1 ) 2 − k \dfrac{n*(n-1)}2-k 2n∗(n−1)−k 个正序。
而翻转之后,正序就会变成逆序,逆序变成正序,不管你这个集合是怎么凑的,翻转之前是 k k k 个逆序, n ∗ ( n − 1 ) 2 − k \dfrac{n*(n-1)}2-k 2n∗(n−1)−k 个正序,翻转之后就是 n ∗ ( n − 1 ) 2 − k \dfrac{n*(n-1)}2-k 2n∗(n−1)−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
思路:
我嘞个大讨论啊,屎题。我已经能预想到那好看的通过率了。
我讨论的方法如下:
- 当 k = 0 k=0 k=0 时,就尽量让每个数都是 1 1 1,最后一个数放剩余的还没用掉的值。
- 当 s < n s<n s<n 时,这时甚至做不到让每个位置都是 1 1 1,一定会有位置为 0 0 0,因此无解
- 当 s ≥ n s\ge n s≥n 时,就可以用上面的思路来凑。
- 当 k ≠ 0 k\not=0 k=0 时,先凑出 0 , 1 , 2 , … , k − 1 0,1,2,\dots,k-1 0,1,2,…,k−1,这样 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,…,k−1 一共 k k k 个数,总和为 t o t = k ∗ ( k − 1 ) 2 tot=\dfrac{k*(k-1)}2 tot=2k∗(k−1)
- 有可能 s < t o t s<tot s<tot,这时连前面的 k k k 个数都凑不出来,因此无解。
- 有可能 s = t o t s=tot s=tot,这时正好没有剩余的数,因此凑出前 k k k 个数后后面都可以补 0 0 0
- 当位置个数 n < k n<k n<k 时,位置不够,因此无解。
- n ≥ k n\ge k n≥k 时,位置够,用上面的方法来凑。
- 有可能 s − t o t = k s-tot=k s−tot=k,这时不能直接把剩余的值 s − t o t s-tot s−tot 放在后面,必须先拆出一个单独的 1 1 1 ,然后再把 s − t o t − 1 s-tot-1 s−tot−1 放下,后面补 0 0 0。
- 有可能 s − t o t = k = 1 s-tot=k=1 s−tot=k=1,这时做不到先拆出一个单独的 1 1 1 ,然后再把 s − t o t − 1 s-tot-1 s−tot−1 放下,因为也会冲突,这时无解。
- 有可能位置个数不够,即 n < k + 2 n<k+2 n<k+2,这时无解
- 剩余情况,按上面的方法来凑。
- 按上面的方法来凑需要至少 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 x,y 轴各复制一遍,这样从 ( i , j ) (i,j) (i,j) 到 ( i + n − 1 , j + n − 1 ) (i+n-1,j+n-1) (i+n−1,j+n−1) 的这个矩形就相当于原矩形向左循环移位 i − 1 i-1 i−1 次,向上循环移位 j − 1 j-1 j−1 次。
我们枚举矩形的左上角坐标 ( 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 i−1 个位置和后 n − j n-j n−j 个位置同时选出 k k k 个数,在中间的 j − i − 1 j-i-1 j−i−1 个数中选若干个数,这样就凑出一个 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=i−1,y=n−j,那么选取的方案数就是 ∑ 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}Cxk∗Cyk∗2n−x−y−2。
因为 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} 2n−x−y−2 和 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}Cxk∗Cyk,我们不妨设 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=0xCxk∗Cyk=∑k=0xCxx−k∗Cyk 这一步可以通过范德蒙德卷积优化,得到 = 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范德蒙德卷积)
比赛链接 官方讲解 很幸运参加了内测,不过牛客这消息推送天天发广告搞得我差点错过内测消息,差点进小黑屋,好在开赛前一天看到了。 这场不难,ABC都很签到,D是个大讨论,纯屎,E是需要对循环移位…...

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

ffmpeg面向对象-待定
1.常用对象 rtsp拉流第一步都是avformat_open_input,其入参可以看下怎么用: AVFormatContext *fmt_ctx NULL; result avformat_open_input(&fmt_ctx, input_filename, NULL, NULL);其中fmt_ctx 如何分配内存的?如下 int avformat_ope…...

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

GC-分代收集器
GC收集器介绍 十款GC收集器 上图中共有十款GC收集器,它们可以根据回收时的属性分为分代和分区两种类型: 分代收集器:Serial、ParNew、Parallel Scavenge、CMS、Serial Old(MSC)、Parallel Old 分区收集器ÿ…...

C++从入门到起飞之——priority_queue(优先级队列) 全方位剖析!
🌈个人主页:秋风起,再归来~🔥系列专栏:C从入门到起飞 🔖克心守己,律己则安 目录 1、priority_queue的介绍 2、priority_queue的使用 3、priority_queue的模拟实现 3.1、仿函数的介…...

[数据集][目标检测]西红柿缺陷检测数据集VOC+YOLO格式17318张3类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):17318 标注数量(xml文件个数):17318 标注数量(txt文件个数):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,版本打印3.2 测试2,绘制三角形3.3 测试3,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导出功能
一、结果展示 主要功能:可以根据前端传递的参数,导出指定列、指定行 1.1 案例一 前端页面 传递参数 {"excelName": "导出用户信息1725738666946","sheetName": "导出用户信息","fieldList": [{&q…...

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

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

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

k8s调度(pod亲和、反亲和、污点、容忍度)
pod亲和性 针对对象为Pod,目的是实现,新建Pod和目标Pod调度到一起,在同一个Node上。 示例: apiVersion: v1 kind: Pod metadata:name: testpod01labels:app: myapp01env: test1 spec:containers:- name: testpod01image: nginx:…...

智能制造核心领域:自动化、物联网、大数据分析、人工智能在现代制造业中的应用与融合
一、智能制造系统及领域 智能制造系统是一套集成的解决方案,它利用物联网(IoT)、大数据分析、人工智能(AI)、机器学习和云计算等技术,实现工厂和生产线的自动化、数据驱动和智能化。这些系统能够监控和控制…...

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最新版创建项目, 并成功输出Hello World。 本次教程版本…...

请解释Java中的CountDownLatch和CyclicBarrier的区别和使用场景。什么是Java中的Semaphore?它如何控制并发访问?
请解释Java中的CountDownLatch和CyclicBarrier的区别和使用场景。 CountDownLatch 和 CyclicBarrier 是 Java 并发包(java.util.concurrent)中提供的两个非常有用的同步工具,它们都用于控制多个线程之间的同步,但它们的目的和使用…...

Django+Vue3前后端分离学习(五)(前端登录页面搭建)
1、如果需要使用组合式API,需要安装插件: npm install vite-plugin-vue-setup-extend --save-dev 在vite.config.js里配置: 首先导入: import VueSetupExtend from vite-plugin-vue-setup-extend 添加: 2、创建login.vue 然…...

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

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

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

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

【Kubernetes】常见面试题汇总(一)
目录 1.简述 etcd 及其特点? 2.简述 etcd 适应的场景? 3.简述什么是Kubernetes? 4.简述 Kubernetes和 Docker的关系? 1.简述 etcd 及其特点? (1)etcd 是Core0s 团队发起的开源项目…...

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

Leetcode面试经典150题-128.最长连续序列-递归版本另解
之前写过一篇这个题的,但是可能代码比较复杂,这回来个简洁版的,这个是递归版本 可以看看之前的版本,两个版本面试用哪个都保过 解法都在代码里,不懂就留言或者私信 class Solution {/**对于之前的解法,我…...

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

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

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

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

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