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

前缀和和差分笔记

前缀和和差分笔记

一维前缀和

示意图如下:

image-20250323123316777

代码:

**核心公式:sum[i]=sum[i-1]+a[i];(计算前缀和的)**
#include<bits/stdc++.h>
using namespace std;
const int N=10000;
#define ll long long
int a[N],sum[N];
int main(){cin>>a[0];sum[0]=a[0];for(int i=1;i<num;i++){cin>>a[i];sum[i]=sum[i-1]+a[i];}
}

应用:

用于计算区间和,公式为sum[R]-sum[L-1](计算第L位到第R位的区间和)

P8218 【深进1.例1】求区间和 - 洛谷

二维前缀和

示意图

在写核心公式之前先明确几个概念

什么是sum[x] [y]

image-20250323130342223

代码

核心公式

1.ans=sum[x2] [y2]-sum[x1-1] [y2]-sum[x2] [y1-1]+sum[x1-1] [y1-1]

怎么记?首先混搭,然后一行变一行就不变,且x2不变,最后减掉都变

如:x2不变则x1变,变为x1-1

sum[x2] [y2]-sum[x1-1] [y2]-sum[x2] [y1-1]-sum[x1-1] [y1-1]

默写完毕

  1. sum[i] [j]=sum[i-1] [j]+sum[i] [j-1]-sum[i-1] [j-1]+g[i] [j];

左右都加顺便加自己减去重复的

记得在那之前要写好你的三个条件

	if(!x1&&!y1)return sum[x2][y2];
//	如果起点在00,则直接输出sumif(!x1)return sum[x2][y2]-sum[x2][y1-1];if(!y1)return sum[x2][y2]-sum[x1-1][y2];
//口诀就是固定那个,那个位置就不变(如固定x1,则x2不变,y1变则需要减掉的就是sum[x2][y1-1])
//二维前缀和
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 10000;
int n = 3, m = 4;
int g[3][4] = {{1, 2, 6, 8},{9, 6, 7, 3},{5, 3, 2, 4}
};
int sum[N][N];
void presum() {sum[0][0] = g[0][0];for (int i = 1; i < n; i++) {sum[i][0] = sum[i - 1][0] + g[i][0];//第一列,固定列,前缀和}for (int i = 1; i < n; i++) {sum[0][i] = sum[0][i - 1] + g[0][i]; //第一行,固定行,前缀和}for (int i = 1; i < n; i++) {for (int j = 1; j < m; j++) {sum[i][j] = g[i][j] + sum[i][j - 1] + sum[i - 1][j] - sum[i - 1][j - 1];}}
}
int getsum(int x1, int y1, int x2, int y2) {if (!x1 && !y1)return sum[x2][y2];
//	如果起点在00,则直接输出sumif (!x1)return sum[x2][y2] - sum[x2][y1 - 1];if (!y1)return sum[x2][y2] - sum[x1 - 1][y2];return sum[x2][y2] - sum[x2][y1 - 1]-sum[x1-1][y2]+sum[x1-1][y1-1];}
int main() {presum();cout<<getsum(1,1,2,2);return 0;
}

P1719 最大加权矩形 - 洛谷

通过这道题我们能将这个过程再次简化

//最大加权矩形
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=10000;
ll ans=INT_MIN;
ll g[N][N];
ll sum[N][N];
int main(){int n;cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>g[i][j];sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+g[i][j];}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){for(int k=i;k<=n;k++){for(int q=j;q<=n;q++){ans=max(sum[k][q]-sum[k][j-1]-sum[i-1][q]+sum[i-1][j-1],ans);}}}}cout<<ans;return 0;
}

一维差分:

差分可以看成前缀和的逆运算。

image-20250407235638067

不用差分的话每次操作都必须要循环一次,时间复杂度比较高

image-20250408000032418

那么久简单啦,每次操作我们就只需要操作两位数,比如,我操作【2,4】都加2就等价于d【2】+v, d[4+1]-v

为什么呢,我们知道,前缀和会怎么样,会加上前面的数,我的前面比原来大了2,那么通过前缀和求出来的现在的值也就大了2,那后面我不想改变怎么办,简单,在不想改变的那个位置减2,不就抵消了吗?

image-20250408000455019

image-20250408000522999

d为差分数组

sumd为对差分数组求前缀和

二分思想

二分查找和二分答案其实本质都是二分思想,二分思想的本质模版其实就是

int bsearch(int l, int r)
{//l为初值,r为末尾值//当左边和右边不相遇时while (l < r){//求取中间用(l+r)/2int mid = (l + r )>> 1;//判断标准,如果标准符合,让其中一方缩小范围if (check(mid)) r = mid;else l = mid + 1;}//最后返回一个你想要的值(左边一般是最小值,右边一般是最大值)return l;
}

左边是最大的最小值,右边是最小的最大值

其实就是都一样的套路,当两个指针不相遇的时候,定义mid为l+(r-1)>>1

定义一个check函数,如果可以在怎么样

其中l=mid+1,r=mid

还可以在后面加点其他思路的东西

二分查找

折半查找,这里只讲他怎么用,具体概念可以参考大佬的文章:【算法笔记】二分查找 && 二分答案 (超详细解析,一篇让你搞懂二分)-CSDN博客

GIF 2025-3-25 23-57-07

使用场景

前提:这个数据是有序的,无需用sort变有序

当问题需要查找元素是否存在或者求元素的坐标的时候可以使用

方法

其实是在划分区域,如图为了找出红蓝的边界,使用上述模版,其check函数就可以判断他是蓝色还是红色,然后如此循环即可找出一个红蓝边界,mid的最终结果其实就是check函数的边界

如:check为红蓝判断函数,则mid最后结果为红蓝边界,l为蓝色,r为红色

check函数为是小于等于5,l为最后一个小于等于5的数字,mid为小于等于5的边界

以此类推

GIF 2025-3-23 15-13-30

上述过程可以用代码完成,但是如果只是为了查找就会比较简单,直接用现有的函数即可

1.如果你是想要查找是否存在使用binary_search()放回一个bool值

2.查找第一个大于等于x的数组位置,lower_bound(a.begin(),a.end(),x)

3.查找第一个大于x的数组位置。upper_bound(a.begin(),a.end(),x)

代码

//二分查找
#include<bits/stdc++.h>
using namespace std;
#define ll long long
vector<int>a={1,2,3,5,5,5,8,8,9,9};
//int binary(){
//	int l=-1,r=10;
//	while(l+1!=r){
//		int m=floor((l+r)/2);
//		if(a[m]==5)
//			l=m;
//		else
//			r=m;
//	}
//	return l;
//}
int main(){
//	返回一个bool值,查看这个元素是否存在int ans=binary_search(a.begin(),a.end(),15);//若不存在返回int ans1=(lower_bound(a.begin(),a.end(),5)-a.begin());int ans2=(upper_bound(a.begin(),a.end(),5)-a.begin());cout<<ans<<" "<<ans1<<" "<<ans2;return 0;
}

例题:

P1102 A-B 数对 - 洛谷

灵活运用好lower_bound(第一个大于等于)和up_bound(第一个大于)

我们用第一个大于减去第一个大于等于得到的数量不就是重复的的那一些

2 3 3 3 3 3 4

大于等于3 返回1

大于3 返回6

则可以算出3有6-1=5个

//二分查找AB数对
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[200100];
int main(){ll n,m,ans=0;cin>>n>>m;for(int i=0;i<n;i++){cin>>a[i];}sort(a,a+n);for(int i=0;i<n;i++){ans+=(upper_bound(a,a+n,a[i]-m)-a)-(lower_bound(a,a+n,a[i]-m)-a);}cout<<ans;return 0;
}

二分答案

那什么是二分答案呢?

使用场景

前提是这个区间是有序的,无序必须想方法变有序

对于一个问题,它的答案属于一个区间,当这个区间很大时,暴力超时。如果这个区间有序,我们则可以折半查找,选定一个标准,如果中间大于这个标准则答案在左边,如果小于则在右边,由此往复

image-20250323225614450

方法及其代码

int bsearch(int l, int r)
{//l为初值,r为末尾值//当左边和右边不相遇时while (l < r){//求取中间用(l+r)/2int mid = (l + r )>> 1;//判断标准,如果标准符合,让其中一方缩小范围if (check(mid)) r = mid;else l = mid + 1;}//最后返回一个你想要的值(左边一般是最小值,右边一般是最大值)return l;
}

例题:

例题:P1678 烦恼的高考志愿 - 洛谷
其中两个简单样例
1 100000
1000000
以下省略100000个0

输出 100000000000

429 517
7278 2729 3355 1555 595 7805 3741 3566 9466 1505 7419 9102 3236 3500 4592 307 9203 8880 8819 1480 5376 6897 3911 610 6376 4282 8522 5673 7206 5983 4695 8365 5799 9993 2575 4003 2377 2137 2968 982 466 9513 9234 1570 2079 7938 4516 806 4672 6900 4416 7508 2156 3963 5915 9896 8067 3708 6060 7315 1620 9070 7178 1542 209 6494 9107 978 7339 7319 5048 1870 6342 7869 7372 4688 741 5358 719 7100 1676 5659 4037 5825 6059 8794 7262 4350 5907 7882 4151 9194 7494 9752 4544 7377 3826 3268 2854 1437 3292 6055 9889 259 5139 6519 3088 6456 6733 8351 1097 9763 4016 1844 1019 2539 4562 6208 1603 4645 295 8685 9661 6699 3845 7790 6676 341 1878 8984 4395 5951 7551 5434 5977 6615 2091 5684 2100 4341 7353 4783 2864 5975 1944 7786 9326 8182 463 2650 8034 1239 8187 5704 8065 1817 826 7427 3106 6072 9140 2432 4514 574 5095 7696 6485 2495 833 2279 6703 2880 6002 1093 5494 4988 859 2153 260 9333 1949 1020 7153 7197 6866 6066 4860 5000 9588 620 6179 6913 2503 8188 3921 6325 6852 8031 4735 4672 1819 1998 5729 1984 2704 8201 1157 506 1132 3840 7487 9820 8205 9424 558 9379 331 1470 5587 9410 2497 2437 3112 3507 8898 699 3808 1333 2196 5951 314 7401 5283 2467 4700 5200 6907 8993 4824 6250 9202 3645 8580 9909 5606 563 2430 5730 8434 6382 8367 9938 2751 124 7395 3495 8416 3497 7283 751 1095 3803 1694 1320 4031 1561 8769 5781 673 5315 8278 827 2343 8053 3181 8397 8241 8737 5896 3446 5572 1141 6776 7396 1959 6151 6641 8670 7894 9428 6227 34 1464 7715 1358 7628 9449 6876 2166 5231 967 173 3547 2359 3367 9742 5978 2594 1400 449 2413 2888 4657 4748 5439 4892 3186 4717 1375 4152 8380 8038 9169 7861 6949 9061 7978 4176 9313 2485 8926 1561 2787 3925 6224 4608 8499 9501 8485 3971 4344 1961 9090 7110 129 1213 9159 5502 8918 5442 50 3197 2100 3126 3966 3934 8279 8750 3208 3623 5919 8977 6416 9065 5569 5199 5114 8893 7932 6667 4551 8814 5999 4848 9479 3617 9656 5513 8725 834 3010 1507 3 7018 7104 7550 169 3774 3796 4316 3729 6407 8540 7014 6464 3535 6400 8727 8131 7747 7011 6350 4455 7090 8353 5938 5833 2378 7865 9821 1087 3294 1723 4853 3500 3815 7995 4943 5297 5196 6646 8049 1674 5481 4178 1548 5438 6142 233 
2028 4767 1452 5585 6046 3185 3919 4869 4886 1188 3349 8932 1797 5701 258 8231 115 237 5444 987 8003 2041 9922 385 548 8349 2435 1629 5438 1149 8945 8632 78 4811 4738 1085 829 5629 1096 9764 1927 8333 5213 9783 5575 1575 4872 8766 1440 6962 3793 5756 1017 716 7025 4732 1176 8533 9364 6778 8663 3759 7424 8289 1863 532 6235 2622 9246 6013 2733 4768 9963 2817 1578 6756 9838 6254 7343 1308 305 3455 8918 406 8693 8239 2571 6335 5367 7392 9398 6771 6768 448 2298 8180 6411 6568 4122 670 5873 2720 1679 4279 4046 1861 7566 2101 9415 909 2682 4685 4153 4139 7455 3688 142 626 9460 2357 8179 8681 6835 2980 5462 1822 9041 9887 7609 3187 4866 3145 3905 7033 2908 2548 8294 4758 1913 7742 6754 5985 1906 7389 9164 9400 1362 3952 4063 8116 3276 338 3543 7563 1103 7674 818 6427 9023 5926 4436 1258 3505 537 8634 6822 7986 9239 4839 9435 601 8538 5555 4898 1614 4460 3339 4641 9212 4282 6181 607 7823 3127 6878 3057 2077 4294 564 5731 5786 9872 6477 8864 5533 9878 524 5653 379 1188 7065 7666 6124 1665 6318 7250 530 8268 8231 7195 1608 7807 2406 920 9871 9008 5154 6774 6326 5612 6789 1875 1865 8467 7950 8781 2438 384 7758 4977 8832 9869 2327 9755 7596 6152 6460 20 676 5208 9756 9019 3644 486 7741 8561 739 1033 4435 5829 3352 4428 3396 968 9942 2552 5509 8257 4912 3456 5927 9093 589 6336 2953 2166 9288 4935 9554 269 5278 9337 1599 6136 2968 1104 4562 830 4037 4191 3872 4098 1845 5569 5659 4713 8083 9762 3986 9478 6027 784 7196 3985 7693 3839 5862 1201 2959 3536 9278 1882 9175 2288 3751 8208 6521 1620 4815 6406 660 7674 2707 4295 589 8924 3245 3721 6944 7685 9480 6896 6788 7365 4131 4289 8693 22 2088 6583 4622 1859 995 3998 8508 5856 1633 2880 8608 9817 7923 5547 7089 7987 6356 382 8254 9237 3247 8994 6047 9335 4764 6560 3068 9081 7108 4343 2110 3876 4265 2670 538 4964 7934 3687 5931 1279 419 1994 6227 6360 7393 2783 3060 3123 7103 200 6708 8682 4368 225 3328 6824 4863 715 3061 8569 8477 7467 9966 6178 5863 7674 559 4057 8866 8823 9709 8022 2961 4871 8415 9277 8126 770 207 806 7164 7410 9372 1284 4007 5606 5124 1921 6395 969 1189 7933 1013 7093 1942 5479 17 8709 1953 7547 5389 6813 8717 6976 6680 2451 5337 3247 5351 2494 7978 1095 6391 3229 2471 9632 294 7570 9671 5075 4509 6479 5697 2730 3298 47 8864 1185 2727 9917 3989 7475 1433 6592 1349 6461 7385 6931 2916 1289 4925 619 5637 1353 9313 2972 8303 8865 5923 8640 2168 2106 8590 5208 1276 1497 2348 2320 4420 3045 2443 1611 2427 6680 6139 6756 8287 8893 970 9291 8287 1863 9639 3617 8071 128 8212 9602 4016 7263 2594 4485 1737 1079 5251 6526 3124 5382 3668 

输出:5865

解答

初版

这道题主要是给我们指定的分数线数组A

我们拿自己的成绩G在A中找到最后一个小于等于自己的

那么对于本身不满意度最小的要么就是这个最后一个小于等于自己的,要么就是下一个比自己大,相差虽然不能确定,但是你要知道二分答案就是一个划分区域的工具

二刷:后面的理解

是不是要找最小,那就二分,是不是找本身最小,那就本身入局,作为边界,则可以找出本身边界旁边的大小值

#include<bits/stdc++.h>
using namespace std;
#define ll long long
//const int N=100010;
//int a[N];
//我们的模版二分答案是选出正确答案,但是在实际做题的时候我们要结合实际情况
//来写check
vector<int >a;int ans(int k){int sum=0;int l=0;int r=a.size();int mid;while(l<r){mid=(l+r)>>1;if(a[mid]<=k)l=mid+1;else r=mid;}
//	比第一个还低就没救了if(k<=a[0]){sum=abs(a[0]-k);}
//	否则就得设计算法elsesum=min(abs(a[l-1]-k),abs(a[l]-k));return sum;
}
int main(){int n,m,x;cin>>n>>m;
//	高考各个学校分数线for(int i=0;i<n;i++){cin>>x;a.push_back(x);}sort(a.begin(),a.end());ll t,ansum=0;
//对每个人的成绩进行遍历for(int i=0;i<m;i++){cin>>t;ansum+=ans(t);}cout<<ansum;return 0;
}

记得开ll给ansum,因为加起来可能会爆

[P2678 NOIP 2015 提高组] 跳石头 - 洛谷

初版

二分答案应该是在一个单调闭区间上进行的。

所以当我们看到单调区间的时候,我们就应该有个二分的想法了

二分一般用来解决最优解问题。

题目就是让我们找出一个最小值

如果题目规定了有“最大值最小”或者“最小值最大”的东西,那么这个东西应该就满足二分答案的有界性和单调性。

所以讲了这么多,这道题反正就是得用二分,那我们应该怎么用呢

我们知道二分的模版肯定是那样子

int bsearch(int l, int r)
{//l为初值,r为末尾值//当左边和右边不相遇时while (l < r){//求取中间用(l+r)/2int mid = (l + r )>> 1;//判断标准,如果标准符合,让其中一方缩小范围if (check(mid)) r = mid;else l = mid + 1;}//最后返回一个你想要的值(左边一般是最小值,右边一般是最大值)return l;
}

想到二分,其实最关键的就是我们要如何定义这个check

首先我们看到的是他要移去石头

其实本人一开始看着样例的时候呀,就觉得这道题(按他给的样例来的话),移走两个不就是找出第三小的值吗?

所以其实为了更快查找,我们是不是可以先设这个值为mid=(l+r)/2,反其道而行,如果两者之间的距离大于这个值就说明可以,如果小于就说明这里要被移走,然后移走的数量++,最后对照是不是和题目给的移走m个相同,相同则说明是mid

这个其实是说明什么呢,二分是可以寻找最小的最大值或者最大的最小值的,我们这里其实就是符合条件的最大值**,正好几这个思路,什么的最大值,移走后距离的最大值,那么我们的mid就应该是距离**

这里不开ll因为不求和,其和也在int范围内

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int a[50110],l,n,m;
bool check(int d){int cnt=0,pos=0;//记录一下被移走了多少石头,pos为当前位置for(int i=1;i<=n;i++){if(a[i]-pos<d)//这一步说明是在跳跃cnt++;//略过则直接过elsepos=a[i];//跳过就存储位置}return cnt<=m;
}
int main(){cin>>l>>n>>m;for(int i=1;i<=n;i++){cin>>a[i];}	a[++n]=l;int l1=1,r=l,mid,ans=-1;while(l1<=r){mid=(l1+r)/2;if(check(mid)){l1=mid+1;ans=mid;}else{r=mid-1;}}cout<<ans;return 0;}

二刷理解:

​ 是不是在找距离的最大值,那就距离入局找出这个距离的边界,check函数变复杂了,check函数一定是以距离为接收值的,但是如何判断这个接收值呢,举个例子就知道,我们的接收值太大导致我们的cnt变化了,题目又给了cnt具体值,所以便可利用他来作为限制条件

相关文章:

前缀和和差分笔记

前缀和和差分笔记 一维前缀和 示意图如下&#xff1a; 代码&#xff1a; **核心公式&#xff1a;sum[i]sum[i-1]a[i];&#xff08;计算前缀和的&#xff09;**#include<bits/stdc.h> using namespace std; const int N10000; #define ll long long int a[N],sum[N]; i…...

SSRF漏洞利用的小点总结和实战演练

含义理解&#xff1a; SSRF&#xff08;Server-Side Request Forgery&#xff0c;服务器请求伪造&#xff09;是一种由攻击者构造请求&#xff0c;由服务端发起请求的安全漏洞&#xff0c;一般情况下&#xff0c;SSRF攻击的目标是外网无法访问的内网系统。 攻击者通过篡改URL…...

IAR推动嵌入式开发:云就绪、可扩展的CI/CD和可持续自动化

全球领先的嵌入式系统开发软件解决方案供应商IAR正式发布全新云就绪平台&#xff0c;为嵌入式开发团队提供企业级的可扩展性、安全性和自动化能力。该平台于在德国纽伦堡举办的embedded world 2025展会上正式亮相&#xff0c;标志着将现代DevSecOps工作流集成到嵌入式软件开发中…...

瓦片数据合并方法

影像数据 假如有两份影像数据 1.全球底层影像0-5级别如下&#xff1a; 2.局部高清影像数据级别9-14如下&#xff1a; 合并方法 将9-14文件夹复制到全球底层0-5的目录下 如下&#xff1a; 然后合并xml文件 使得Tileset设置到最高级&#xff08;包含所有级别&#xff09;&…...

RISC-V AIA学习---IPI 处理器间中断

对于有多个hart的机器&#xff0c;必须为每个 hart 提供一个由具体实现定义的内存地址。向这个地址写入数据&#xff0c;就能向该 hart 发送一个机器级软件中断&#xff08;主代码为 3&#xff09;。换句话说&#xff0c;机器级的 IPI 可以通过这种方式&#xff0c;以机器级软件…...

Automattic 裁员16%,Matt Mullenweg称此举旨在提升盈利能力并增强投资实力

2025年4月3日&#xff0c;Automattic——这家以 WordPress.com、Tumblr 和 WooCommerce 等产品闻名的公司&#xff0c;宣布裁减其全球员工队伍的16%。这一决定是在周三通过公司博客文章和 Slack 内部消息向员工透露的。根据裁员前 Automattic 官网显示的员工人数&#xff08;1,…...

图解AUTOSAR_SWS_FlexRayInterface

AUTOSAR FlexRay Interface 模块分析 本文档基于AUTOSAR SWS FlexRayInterface规范,对FlexRay Interface模块进行详细分析。 1. FlexRay Interface 模块架构 1.1 模块架构概览 1.2 架构说明 FlexRay Interface模块是AUTOSAR中的ECU抽象层组件,为上层模块提供统一的抽象接…...

AI赋能ArcGIS Pro——水系网络AI智能提取 | GIS人工智能制图技术解析

我们之前做了做了几期的AIGIS的分享。我们今天要再次做一个分享。 AI赋能ArcGIS Pro——水系网络智能提取全解析 DeepSeek结合ArcGIS Pro制作一个批量建库的脚本工具&#xff08;代码一字未改&#xff0c;直接运行&#xff09; 看老外如何玩DeepSeek&#xff01;15分钟快速创…...

STM32江科大----IIC

声明&#xff1a;本人跟随b站江科大学习&#xff0c;本文章是观看完视频后的一些个人总结和经验分享&#xff0c;也同时为了方便日后的复习&#xff0c;如果有错误请各位大佬指出&#xff0c;如果对你有帮助可以点个赞小小鼓励一下&#xff0c;本文章建议配合原视频使用❤️ 如…...

RAG(检索增强生成)系统,提示词(Prompt)表现测试(数据说话)

在RAG(检索增强生成)系统中,评价提示词(Prompt)设计是否优秀,必须通过量化测试数据来验证,而非主观判断。以下是系统化的评估方法、测试指标和具体实现方案: 一、提示词优秀的核心标准 优秀的提示词应显著提升以下指标: 维度量化指标测试方法事实一致性Faithfulness …...

【leetcode hot 100 763】划分字母区间

解法一&#xff1a;用map记录<字母&#xff0c;字母出现的次数>&#xff0c;循环取出value-1&#xff0c;每次判断已经取出的字母&#xff08;Set记录&#xff09;是否还在后面存在&#xff08;value>1&#xff09;&#xff0c;若存在继续循环&#xff0c;若不存在开启…...

PCB工艺:现代电子产品的核心制造技术

引言 PCB&#xff08;Printed Circuit Board&#xff0c;印刷电路板&#xff09;是电子设备的核心组成部分&#xff0c;几乎所有现代电子产品&#xff0c;从智能手机到航天设备&#xff0c;都依赖于PCB实现电路连接。PCB制造工艺的进步直接影响电子产品的性能、可靠性和成本。…...

【UE5 C++课程系列笔记】34——结构体与Json的相互转化

目录 准备工作 一、结构体转Json 二、Json转结构体 三、复杂结构体与Json的转换 主要通过借助FJsonObjectConverter类实现结构体和 JSON 之间的相互转换。 准备工作 首先新建一个结构体如下 添加两个方法分别用于将Struct转为Json、Json转为Struct 一、结构体转Json FStri…...

2025最新系统 Git 教程(二)

第2章 Git基础 2.1 Git 基础 - 获取 Git 仓库 如果你只想通过阅读一章来学习 Git&#xff0c;那么本章将是你的不二选择。 本章涵盖了你在使用 Git 完成各种工作时将会用到的各种基本命令。 在学习完本章之后&#xff0c;你应该能够配置并初始化一个仓库&#xff08;reposito…...

力扣hot100_动态规划

动态规划 hot100_198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。…...

玄机-第六章-哥斯拉4.0流量分析的测试报告

目录 一、测试环境 二、测试目的 三、操作过程 Flag1 Flag2 Flag3 Flag4 Flag5 Flag6 Flag7 Flag8 Flag9 Flag10 Flag11 Flag12 Flag13 pam_unix.so关键代码 四、结论 一、测试环境 靶场介绍&#xff1a;国内厂商设置的玄机靶场&#xff0c;以应急响应题目著…...

【Hadoop入门】Hadoop生态圈概述:核心组件与应用场景概述

1 Hadoop生态圈概述 Hadoop生态圈是以 HDFS&#xff08;分布式存储&#xff09; 和 YARN&#xff08;资源调度&#xff09; 为核心&#xff0c;围绕大数据存储、计算、管理、分析等需求发展出的一系列开源工具集合。 核心特点&#xff1a; 模块化&#xff1a;各组件专注解决特定…...

深度学习实战电力设备缺陷检测

本文采用YOLOv11作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv11以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对电力设备缺陷数据集进行训练和优化&#xff0c;该数据集包含丰富的电力设备缺…...

随机产生4位随机码(java)

Random类&#xff1a; 用于生成随机数 import java.util.Random; 导入必要的类 generateVerificationCode()方法&#xff1a; 这是一个静态方法&#xff0c;可以直接通过类名调用 返回一个6位数字的字符串&#xff0c;首位不为0 生成首位数字&#xff1a; random.nextInt…...

音视频入门基础:RTCP专题(4)——RTCP协议简介(下)

本文接着《音视频入门基础&#xff1a;RTCP专题&#xff08;3&#xff09;——RTCP协议简介&#xff08;中&#xff09;》&#xff0c;继续对RTCP协议进行简介。本文的一级标题从“十四”开始。 十四、SDES: Source Description RTCP Packet 本段内容对应《RFC 3550》的第6.5节…...

PyCharm2024.3.5专业版解决Conda executable is not found问题

项目场景&#xff1a; pycharm使用anaconda 内的虚拟环境 pycharm 2024.3.5 专业版 C:\Users\Administrator>conda infoactive environment : transmute_recipe_generatoractive env location : D:\anaconda3\envs\transmute_recipe_generatorshell level : 1user config…...

滑动窗口思想 面试算法高频题

基本思想 滑动窗口思想其实就是快慢型的特例 计算机网络中滑动窗口协议&#xff08;Sliding Window Protocol&#xff09;&#xff0c;该协议是TCP实现流量控制等的核心策略之一。事实上在与流量控制、熔断、限流、超时等场景下都会首先从滑动窗口的角度来思考问题&#xff0…...

Linux中特殊的变量

1.$# 含义&#xff1a;表示传入脚本或函数的参数数量。 用法&#xff1a;用于检查用户是否提供了足够的参数。 示例&#xff1a; #!/bin/bash echo "参数数量: $#"2.$? 含义&#xff1a;表示上一条命令的退出状态。如果命令成功执行&#xff0c;值为 0&#xff1b;…...

Linux文件系统与日志分析

目录 一.日志 1.1日志的定义 1.2日志的功能 1.3日志的分类 1.4日志的文件格式 1.5用户日志 1.6一些常见的日志 1.7日志消息的级别 二.系统日志管理 rsyslog 2.1rsyslog的定义 2.2rsyslog 配置文件 2.3rsyslog的实际应用----单独显示某一服务的日志 1.编辑rsyslog配…...

从传统物流到智能调度的全链路升级

一、TMS系统升级的核心目标与整体框架 &#xff08;一&#xff09;为什么要升级&#xff1f;传统物流管理的三大痛点 调度效率低下&#xff1a;过去依赖人工分单、手动匹配承运商&#xff0c;订单量大时容易出错&#xff0c;比如不同区域的订单混排导致运输路线绕路&#xff…...

UE5中如何修复后处理动画蓝图带来的自然状态下的metablriger身体绑定形变(如耸肩)问题

【[metablriger] UE5中如何修复后处理动画蓝图带来的自然状态下的metablriger身体绑定形变(如耸肩)问题】 UE5中如何修复后处理动画蓝图带来的自然状态下的metablriger身体绑定形变(如耸肩)问题...

STL_vector_01_基本用法

&#x1f44b; Hi, I’m liubo&#x1f440; I’m interested in harmony&#x1f331; I’m currently learning harmony&#x1f49e;️ I’m looking to collaborate on …&#x1f4eb; How to reach me …&#x1f4c7; sssssdsdsdsdsdsdasd&#x1f383; dsdsdsdsdsddfsg…...

css2学习总结之尚品汇静态页面

css2总结之尚品汇 一、布局 在 PC 端网页中&#xff0c;一般都会有一个固定宽度且水平居中的盒子&#xff0c;来显示网页的主要内容&#xff0c;这是网页 的版心。 版心的宽度一般是 960 ~ 1200 像素之间。 版心可以是一个&#xff0c;也可以是多个。 二、布局相关名词 我…...

Lua 第5部分 表

表&#xff08; Table &#xff09;是 Lua 语言中最主要&#xff08;事实上也是唯一的&#xff09;和强大的数据结构。 使用表&#xff0c;Lua语言可以以一种简单、统一且高效的方式表示数组、集合、记录和其他很多数据结构。 Lua语言也使用表来表示包&#xff08; package &am…...

01分数规划

https://ac.nowcoder.com/acm/contest/22353/1011 并不需要高级数据结构&#xff0c;对答案二分即可。 假定当前二分的答案为 x x x&#xff0c;则 ∑ v i ∑ w i ≥ x \frac{ \sum_{v_i} }{\sum_{w_i}} ≥ x ∑wi​​∑vi​​​≥x 成立时 x x x 才可能是最后的答案。 化简式…...

无人机动力系统全维度解析:技术演进、选型策略与未来趋势

一、动力系统技术理念与设计逻辑 &#xff08;一&#xff09;核心技术指标 能量密度&#xff1a;决定续航能力的关键参数&#xff0c;单位为 Wh/kg。当前主流锂聚合物电池能量密度约 250-300Wh/kg&#xff0c;氢燃料电池可达 500-800Wh/kg&#xff0c;航空燃油则高达 12,000W…...

重新审视中国的GB标准(44495 – 44497)

此前&#xff0c;我们深入探讨了中国新推出的智能互联汽车(ICV)网络安全标准GB Standard 44495-2024。我们探讨了该标准对汽车制造商的影响、与UNECE R155和ISO/SAE 21434等全球标准的一致性&#xff0c;以及该标准对未来汽车网络安全的意义。 然而&#xff0c;GB 44495-2024并…...

Linux进程控制(五)之做一个简易的shell

文章目录 做一个简易的shell预备知识代码实现运行结果 做一个简易的shell 重谈Shell shell是操作系统的一层外壳程序&#xff0c;帮我们用户执行指令&#xff0c; 获取到指令后&#xff0c;交给操作系统&#xff0c;操作系统执行完后&#xff0c;把执行结果通过shell交给用户…...

Apache Kafka全栈技术解析

目录 第一章 Kafka概述与核心价值 1.1 消息队列的演进与Kafka的诞生 1.2 Kafka的核心应用场景 1.3 Kafka生态全景图 第二章 Kafka核心概念与架构解析 2.1 核心概念深度剖析 2.2 Kafka架构设计精要 第三章 Kafka环境搭建与配置 3.1 单机部署实战 3.2 集群部署最佳实践 …...

结合 Flink/Spark 进行 AI 大数据处理(实时数据 + AI 推理的应用场景)

随着企业对实时智能决策的需求日益增强,将 Flink / Spark 等流批计算框架 与 大模型推理能力相结合,正在成为 AI 工业化落地的重要实践路径。本篇文章将深入介绍如何将 AI 模型集成到大数据流处理系统中,实现实时感知、智能判断与自动反馈。 1. 为什么需要“实时数据 + AI 推…...

开发PDF时,如何比较 PDF 文件

在 PDF 论坛上&#xff0c;“如何比较 PDF 文件”是一个经常被提到的问题。在开始之前&#xff0c;重要的是要明确你想要比较的内容是什么。 不同的 PDF 文件可能看起来一样吗&#xff1f; 是的&#xff0c;可能。不同的 PDF 创建工具可能会生成在视觉上完全相同的页面&#x…...

自动提取pdf公式 ➕ 输出 LaTeX

# 创建打包脚本的主内容 script_content """ from doc2x.extract_formula import extract_formula_imgs from pix2text import Pix2Text from PIL import Image import osdef main():pdf_path "your_file.pdf" # 将你的PDF命名为 your_file.pdf 并…...

abaqus二次开发python程序集

abaqus二次开发python程序集 1、设置字体背景色等2、读取模态频率并写入 csv 文件3、在两个窗口快速对比各价模态 1、设置字体背景色等 # _*_ coding:UTF-8 _*_from abaqusConstants import* def fontsize(sessionNone):#设置字体session.viewports[Viewport: 1].viewportAnno…...

高级java每日一道面试题-2025年3月23日-微服务篇[Nacos篇]-如何使用Nacos进行服务发现?

如果有遗漏,评论区告诉我进行补充 面试官: 如何使用Nacos进行服务发现&#xff1f; 我回答: 在Java高级面试中讨论如何使用Nacos进行服务发现时&#xff0c;可以从多个角度深入探讨&#xff0c;包括基本概念、配置步骤、代码示例以及高级特性。以下是综合了多种信息的详细回…...

k8s核心资源对象一(入门到精通)

本文将深入探讨Kubernetes中的核心资源对象&#xff0c;包括Pod、Deployment、Service、Ingress、ConfigMap和Secret&#xff0c;详细解析其概念、功能以及实际应用场景&#xff0c;帮助读者全面掌握这些关键组件的使用方法。 一、pod 1 pod概念 k8s最小调度单元&#xff0c;…...

了解 DeepSeek R1

了解DeepSeek R1 R1探索纯强化学习是否可以在没有监督微调的情况下学会推理的能力。 ‘Aha’ Moment 这种现象有点类似于人类在解决问题时突然意识到的方式&#xff0c;以下是它的工作原理&#xff1a; 初始尝试&#xff1a;模型对解决问题进行初始尝试识别&#xff1a;识别…...

【C语言】大小端字节序和字节序判断

前言&#xff1a; 在上章介绍了整形在内存的储存&#xff0c;了解了原码&#xff0c;反码&#xff0c;补码&#xff0c;知道了整数在内存的储存一般是补码&#xff0c;解决了负数相加的问题。 那么在本章为大家讲解一下大小端字节序。 一那字节序是什么呢&#xff1f; 字节…...

DrissionPage移动端自动化:从H5到原生App的跨界测试

一、移动端自动化测试的挑战与机遇 移动端测试面临多维度挑战&#xff1a; 设备碎片化&#xff1a;Android/iOS版本、屏幕分辨率差异 混合应用架构&#xff1a;H5页面与原生组件的深度耦合 交互复杂性&#xff1a;多点触控、手势操作、传感器模拟 性能监控&#xff1a;内存…...

ARM 汇编启动代码详解:从中断向量表到中断处理

ARM 汇编启动代码详解&#xff1a;从中断向量表到中断处理 引言 在嵌入式系统开发中&#xff0c;ARM 处理器&#xff08;如 Cortex-A 系列&#xff09;的启动代码是系统初始化和运行的基础。启动代码通常包括中断向量表的创建、初始化硬件状态&#xff08;如关闭缓存和 MMU&a…...

笔试专题(七)

文章目录 乒乓球筐&#xff08;哈希&#xff09;题解代码 组队竞赛题解代码 删除相邻数字的最大分数&#xff08;线性dp&#xff09;题解代码 乒乓球筐&#xff08;哈希&#xff09; 题目链接 题解 1. 两个哈希表 先统计第一个字符串中的字符个数&#xff0c;再统计第二个字…...

React基础知识(一)

文章目录 概念特点React基本使用hello_react案例虚拟DOM的两种创建方式使用jsx创建使用js创建 虚拟DOM和真实DOM React jsxXMLjsx语法规则作用基本语法规则js语句和js代码babel.js作用 模块与组件模块组件 React面向组件编程函数式组件类组件 概念 react是一个将数据渲染为Htm…...

红黑树(Red-Black Tree)核心知识点与面试高频问题

红黑树&#xff08;Red-Black Tree&#xff09;核心知识点与面试高频问题 一、红黑树的核心性质 红黑树是一种自平衡的二叉搜索树&#xff0c;通过以下规则确保平衡性&#xff1a; 节点颜色&#xff1a;每个节点是红色或黑色。 根节点&#xff1a;根必须是黑色。 叶子节点&a…...

SpringBoot整合SSM

一、SpringBoot整合SSM SpringBoot整合SpringSpringBoot整合SpringMVCSpringBoot整合MyBatis&#xff08;主要&#xff09; 步骤一&#xff1a;创建SpringBoot工程&#xff0c;添加druid依赖 <!-- todo 1 添加druid连接池依赖--> <dependency><groupId>co…...

set/multiset容器

1.概念 所有元素会在插入时自动排序 set/multiset属于关联式容器&#xff0c;底层结构是用二叉树实现。 set不允许重复元素&#xff0c;multiset允许重复元素。 2. set构造和赋值 set<T> st; set(const set &st);// 拷贝构造函数 set& operator(const set &a…...

vim 编辑器 使用教程

Vim是一款强大的文本&#xff08;代码&#xff09;编辑器&#xff0c;它是由Bram Moolenaar于1991年开发完成。它的前身是Bill Joy开发的vi。名字的意义是Vi IMproved。 打开vim&#xff0c;直接在命令行输入vim即可&#xff0c;或者vim <filename>. Vim分为四种模式&a…...