【2023百度之星初赛】跑步,夏日漫步,糖果促销,第五维度,公园,新材料,星际航行,蛋糕划分

目录

题目:跑步

思路: 

题目:夏日漫步

思路:

题目:糖果促销

思路:

题目:第五维度

 思路:

题目:公园

思路:

  新材料

思路:

 星际航行

思路:

题目:蛋糕划分

​编辑

思路: 


        

                

题目:跑步

小度每天早上要和小猫一起跑步。小猫的位置数值越小表示越在后面,速度越小表示越慢,它们都向一个方向跑。

小猫比较喜欢一起跑,所以当速度更快的小猫遇见速度慢的小猫时,它就会放慢速度,变成一组一起跑。注意,初始位置相同的小猫直接组成一组。

请问最终不再有追赶上的情况时,最多一组有多少只小猫?

        

       

思路: 

我们先来捋一下题目哈:不同位置的小猫同时以不同速度开跑,当后面的猫追上前的猫时,它们就会以低速猫速度共速,成为一组,求最终一组最多的猫个数。

正着想不太好想,因为变化因素较多。我们可以倒着想:从最前面的猫开始推导,若i-1只猫速度大于第i只猫,不管i-1猫会不会被别的猫追上,都不会影响i-1猫追上i猫这个结果。然后要注意一下刚开始在同一位置的猫会直接分成一组。
操作:
我们先对猫按位置排列,同位置的猫猫速度小优先,然后先把同一位置的猫速度统一一下,此时同组的猫猫速度按最前面的猫速(最低速猫)设定速度,最后从后向前遍历:对i猫,将i后面连续所有v大于i的猫都直接统计出来(这个就是此组中最终会有的猫猫数),然后从i猫跳到不满足条件猫的位置(方便统计下一组的猫猫),不断重复即可!

#include <bits/stdc++.h>  //跑步:有n只小猫,出现在pi位置,速度为vi向前跑,不同速度小猫相遇时会共速成一组(取慢速那个),问最多一组的小猫个数
using namespace std;   //贪心,
const int N=1e5+10;
struct node{int p;int v;}ar[N];
bool cmp(node x,node y){
	if(x.p!=y.p)return x.p<y.p;//必须这么写,可别偷懒!
	else return x.v<y.v;
}
int main(){
	int n;cin>>n;
	for(int i=1;i<=n;i++){
		scanf("%d%d",&ar[i].p,&ar[i].v);
	}
	sort(ar+1,ar+1+n,cmp);
	for(int i=1;i<n;i++){
		if(ar[i].p==ar[i+1].p) ar[i+1].v=ar[i].v;//同位置的猫速度给统一一下
	}
	int ans=-1,cnt=1,inde=n;//cnt来统计当前组有几只小猫
	while(1){
		if(inde-cnt==0)break;//遍历结束
		if((ar[inde].p!=ar[inde-cnt].p&&ar[inde].v<ar[inde-cnt].v)||(ar[inde].p==ar[inde-cnt].p))cnt++;
		//两个情况都要统计进去:两只猫位置不同但后猫更快, 两只猫位置相同
		else inde=inde-cnt,cnt=1;
		ans=max(ans,cnt);
	}
	cout<<ans;
}

        

        

题目:夏日漫步

夏日夜晚,小度看着庭院中长长的走廊,萌发出想要在上面散步的欲望,小度注意到月光透过树荫落在地砖上,并且由于树荫的遮蔽度不通,所以月光的亮度不同,为了直观地看到每个格子的亮度,小度用了一些自然数来表示它们的亮度。亮度越高则数字越大,亮度相同的数字相同。

走廊是只有一行地砖的直走廊。上面一共有 n个格子,每个格子都被小度给予了一个数字 ai​ 来表示它的亮度。

小度现在站在 1号格子,想要去到 n号格子。小度可以正向或反向移动到相邻的格子,每次需要花费 1的体力。

同时小度还有瞬移的能力,其可以花费 1的体力来瞬移到与当前格子亮度相同的格子上。而且由于小度视野有限,只能瞬移到在当前格子后的第一次亮度相同的格子上。这也意味着不能反向瞬移。

小度想知道,到达 n号格子需要花费的最小体力是多少。以此制定一个最优秀的散步方案。

        

思路:

题意就是可以正向反向走一步,也能正向瞬移到相同亮度的地方。

这个题可以按照跑图题来做,每个相邻位置前后连起来,然后当前位置和之前同亮度位置单向连接,然后我们跑bfs,按步数进行遍历,就可以知道到最早哪一步时候可以走到终点!

#include <bits/stdc++.h> //夏日漫步
using namespace std;
const int N=2e5;
int pos[1000000];
vector<int>v[N];
queue<int>q;
int main(){
	int len,ans=0,n,a;cin>>n;
	for(int i=1;i<=n;i++){
		scanf("%d",&a);
		if(i+1<=n)v[i].push_back(i+1),v[i+1].push_back(i);//正常建边
		if(!pos[a])pos[a]=i;
		else v[pos[a]].push_back(i),pos[a]=i;//正向瞬移建边
	}
	q.push(1);int p,sign=0;
	while(!q.empty()){
		ans++;//按层bfs
		len=q.size();
		while(len--){
			p=q.front();q.pop();
			for(int i=0;i<v[p].size();i++){
				if(v[p][i]==n){
				sign=1;break;}
				else if(p<v[p][i])q.push(v[p][i]);
			}
			if(sign)break;
		}
		if(sign)break;
	}
	cout<<ans;
}

        

        

题目:糖果促销

小度最喜欢吃糖啦!!!
这天商店糖果促销,可给小度高兴坏了。

促销规则:一颗糖果有一张糖纸,p张糖纸可以换取一颗糖果。换出来糖果的包装纸当然也能再换糖果。

小度想吃 k颗糖果,他至少需要买多少颗糖?

思路:

注意到“至少 ”,细品!就是说最后一次换糖果时恰好没有多余的糖皮,即最终手里有一定且仅有一张糖皮(如果手里有大于两张糖皮的话,那就上次兑换就有多余的糖皮,也就是多买的糖)
好了,我们来分析:一共吃了k个糖,那么有k-1个糖皮被换成了糖,那么需要买的糖就是k-(k-1)/p;
最后呢!这个题其实还可以二分来做

 

#include <bits/stdc++.h>   //糖果促销:p个糖果可以换1个糖,想吃k个糖至少要买多少个糖 (1<=t<=1e6, 1<=p<=1e9, 0<=k<=1e9)
using namespace std;
int t,p,k;
int main(){
	cin>>t;
	while(t--){
		cin>>p>>k;
		if(k==0) cout<<0<<'\n';//注意题上的数据范围
		else{
			k-=(k-1)/p;//一个式子就行
			cout<<k<<'\n';
		}
	}
}

        

        

题目:第五维度

零维是点,点动成线;

一维是线,线动成面;

二维是面,面动成体;

三维是体,体动成史;

四维是史,史动????

现在人类企图理解第五维度。

而小度现在是第五维度的一位智者。一天,小度发现人类的许多科学家在试图理解第五维度,人类是四维生物,若是他们理解了第五维度,很可能也会到来第五维度的空间,这显然是小度不愿意看到的(毕竟哪里都有人口数量的问题….)所以小度希望他们尽可能晚的理解第五维度,因此,小度用更高维度的视角把所有人类中在理解第五维的科学家都看到了,而这些科学家的智商会不一样,所以他们的理解速度 Vi​ 也会不一样;并且,他们开始理解的时间点 Si​ 也不一样。理解速度 Vi​ 描述为每过单位时间可获得 Vi​ 个单位理解力,也就是说在 Si​+1 的时间点该科学家会第一次贡献 Vi​ 的理解力。我们定义理解力总数超过 m 时理解了第五维度。 小度因为维度更高,可以使用时间悖论来给人类一次重大的打击,小度可以让任意一位科学家在任意一个时间点消失,所以他接下来的理解不会继续;而且人类不会记得他,所以他之前的贡献会消失。因为小度能力有限,所以小度只能使用一次暂时悖论。

现在求在尽可能晚的情况下,人类理解第五维度的最早时间点。

时间点初始为0,但显然,没有科学家能够在 0时刻有贡献。

 思路:

二分答案,那么这次二分什么呢?当然是时间了!

我们只要遍历每个二分后的时间点就行,看在有效时间内贡献最多的人消失后还能不能理解第五维度,如果仍然可以理解,那么我们就继续减少时间,直到不能再减少时间,那么答案就出来了。

那么怎么知道最终的二分结果究竟能不能使人理解理解第五维度呢?我们只需要再带入一次check函数判断即可!
 

#include <bits/stdc++.h>//第五维度:有n个科学家,在不同的时间点s出现,之后每天贡献v,当人类贡献总和大于m时,就理解了第五维度,但上帝可以随机
using namespace std;  //使一个人消失,他的所有贡献也会消失,问人类最晚多久可以理解第五维度,如果不能输出-1
typedef long long ll;
ll s[100000],v[100000],n,m;
bool check(ll t){
	ll sum=0,max_=-1;
	for(int i=1;i<=n;i++){
		if(t<=s[i])continue;//后面出现的人就跳过
		sum+=(t-s[i])*v[i];
		max_=max(max_,(t-s[i])*v[i]);//找最大贡献的人
	}
	return sum-max_>m;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		scanf("%d %d",&s[i],&v[i]);
	}
	ll mid,l=0,r=2e9;
	while(l<=r){
		mid=(l+r)>>1;
		if(check(mid)) r=mid-1;
		else l=mid+1;
	}
	if(check(l))cout<<l;//对二分查找失败的情况进行特判
	else cout<<-1;
}

        

        

题目:公园

今天是六一节,小度去公园玩,公园一共 N 个景点,正巧看到朋友圈度度熊也在这个公园玩,于是他们约定好一块去景点 N。 小度当前所在景点编号为 T,从一个景点到附近的景点需要消耗的体力是 TE,而度度熊所在景点编号为 F ,移动消耗为 FE。 好朋友在一块,赶路都会开心很多,所以如果小度和度度熊一块移动(即在相同位置向相同方向移动),每一步他俩的总消耗将会减少 S。
求他俩到景点 N 时,所需要的总消耗最少是多少?

         

输入:

4 4 3
1 2 8 8
1 4
2 3
3 4
4 7
2 5
5 6
6 8
7 8

输出:

22

思路:

其实注意到两个人的消耗是固定的,既然不知道在哪相遇,不妨把每个点都做中间相遇点试试,(你看看,出题人就是想让你暴力的)。

我们先对3个点找各自到其他点的最短距离,假如a点是相遇点,那么三个点(小度,小熊,终点)到此点a的最短距离×各自三个消耗(消耗怎么算?就看走了多长就行,因为每短的消耗是一样的),这样的话,一种答案就出来了,然后找出最优答案即可。

其实,从这道题,你发现了什么?是不是找3个点的最近距离问题!

#include <bits/stdc++.h>    //公园:共n个景点,两个人都要到n景点,两人移动一个景点就各消耗e1,e2,一起走消耗减少e3。求最少消耗?到不了输出-1
using namespace std;   //暴力枚举
typedef pair<int,int> pa;
const int N=40005;
int dis[3][N],head[N];
int s1,s2,n,m;  
long long ans=1e17;
priority_queue<pa,vector<pa>,greater<pa>> Q;
struct node{int to;int next;}e[N*2];
void add(int u,int v){
	static int i=0;i++;
	e[i].to=v;
	e[i].next=head[u];head[u]=i;
}
void dijkstra(int s,int dis[]){
	for(int i=0;i<=n;i++)dis[i]=40000;
	dis[s]=0;
	Q.push(make_pair(0,s));
	while(!Q.empty()){
		int u=Q.top().second;int dis_=Q.top().first;Q.pop();
		if(dis_!=dis[u]) continue;
		for(int i=head[u];i;i=e[i].next){
			int v=e[i].to;
			if(dis[v]>dis[u]+1)
				dis[v]=dis[u]+1,Q.push(make_pair(dis[v],v));
		}
	}	
}
int main(){
	long long e1,e2,e3; //之所以ll型,是因为dis是int型,运算时方便给ll型ans赋值(类型隐式转换)
	cin>>e1>>e2>>e3;  //e1,e2是两人的消耗,e3是减少的消耗:
	cin>>s1>>s2>>n>>m;//s1,s2是两个人的起点,n,m是景点数和边数
	int u,v;
	while(m--){
		scanf("%d %d",&u,&v);
		add(u,v);add(v,u);  //建边
	}
	dijkstra(s1,dis[0]); //寻找3个点到其余点的最短距离
	dijkstra(s2,dis[1]);
	dijkstra(n,dis[2]);
	for(int i=1;i<=n;i++){ //如果dis没有变说明这个点到不了,标记一下
		if(dis[0][i]==40000)dis[0][i]=-1;
		if(dis[1][i]==40000)dis[1][i]=-1;
		if(dis[2][i]==40000)dis[2][i]=-1;
	}
	for(int i=1;i<=n;i++){ 
		if(dis[0][i]!=-1&&dis[1][i]!=-1&&dis[2][i]!=-1) //3个点都要能到才算有效(能连起来)
		ans=min(ans,dis[0][i]*e1+dis[1][i]*e2+dis[2][i]*(e1+e2-e3)); //(ll*int)->ll类型
	}
	if(ans==1e17){cout<<-1;return 0;}//3个点没有一个公共交点,即3个点连不起来
	cout<<ans;
	return 0;
}

        

  新材料

思路:

直接模拟:因为要考虑上次出现的位置,所以使用map映射最好,如果没有出现过就建立新映射,如果出现过但是已经反应过就跳过,如果出现过但是不足以反应,就建立新映射,如果能反应就反应,并标记。 

#include <bits/stdc++.h>
using namespace std;
map<int,int>mp;
int n,k;
int main(){
	scanf("%d%d",&n,&k);
	int ans=0;
	for(int i=1;i<=n;i++){
		int cur;scanf("%d",&cur);
		if(!mp.count(cur))mp[cur]=i;//有返回1无返回0,返回-1表示已经反应过了
		else if(mp[cur]==-1)continue;
		else if(i-mp[cur]>k)mp[cur]=i;
		else ans^=cur,mp[cur]=-1;
	}
	cout<<ans<<'\n';
}

        

        

 星际航行

思路:

我们的任务是把三维的一群点,变成任意两维都相同,另一维是个差为1的等差数列,然后求最小代价。其实我们可以枚举下哪两维相同,然后计算代价,再计算剩下的一维变成等差数列的代价。

任务1:把一个维度上的所有点变到同一个位置的最小代价就是把所有点都挪到中间点上,你可以画图证明:每两个点之间挪动的代价恰好都是两点之间的线段距离的情况下,总代价最小。

如图:我们只要保证更多的点分布在中间点的两边,且两边的点都恰好连成线段时候代价是最小的(这个偶数的点的情况,奇数的点的情况会更加明显)

(上面的的是选10为中间点,下面的是选9为中间点) 

任务2:要把一个维度上所有点变成一个等差数列且代价最小,就必须不能改变它们之间原来的顺序。如图:(我们假设最终的点的起点是t,那么所有点最终坐标是t+i)

那么最终的代价是sum|xi-(t+i)|最小,然后我们再变形一下:sum|(xi-i)-t|,诶,这不就是所有点xi-i到t的代价最小吗,我们只需要在重复一下上面任务1的做法就行了。

那么最终做法就是:先把数组排序,然后找到求每个点到中间的点的距离和,最终求出两个度的代价,然后在求ai=ai-i,再做一遍,这样就枚举出了一种情况了,然后把所有情况都枚举一下就行了。

        

        

题目:蛋糕划分

小度准备切一个蛋糕。这个蛋糕的大小为 N∗N,蛋糕每个部分的重量并不均匀。

小度一共可以切 K刀,每一刀都是垂直或者水平的,现在小度想知道在切了 K刀之后,最重的一块蛋糕最轻的重量是多少。

思路: 

首先这个暴力dfs不行,横刀14下,竖刀14下,共2^28*14^2会超时的
其实对最大质量的蛋糕块二分答案即可,难在对答案判断:

首先我们对所有的横刀状态模拟,用一个数的(n-1)位的表示所有状态即可,然后根据此时横刀状态对竖刀进行决策,方法是:
从第一列开始,计算每列区间和,若此时横刀区间和加上新的一列区间后值大于答案了,那就要在此列左边切竖刀,然后在此竖刀右面重新计算新一列区间,
不断重复。其实就是每个横刀区间加上新一列区间后都不要大于答案,如果大于我们就要这里要切竖刀了。最后统计竖刀和横刀数,返回结果即可

(另外,为了加速处理,还要用上二维前缀和)

#include <bits/stdc++.h>   //蛋糕划分:蛋糕大小N*N,每个部分质量不均,共切k刀(横竖均可),使最重的一块蛋糕的质量最轻是多少。
using namespace std;     //2≤N≤15,1≤K≤2N−2  ,每个位置质量W小于1000        和洛谷P1182  数列分段一样思路
int n,k,fal,max_;//fal是答案出错标记,方便快速结束循环
int a[20][20],sum[20][20],col[20],cnt[20],temp[20];;//col存放竖刀的位置,cnt是横切后每个区间和,temp是新一列区间和
int get_sum(int x1,int y1,int x2,int y2){//求上下左右区间和
	return sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1];
}
bool check(int m){
	if(m<max_)return false;//特判
//第一个循环是对每种横刀状态进行遍历(每一个i都代表一种横刀状态)
	for(int i=0;i<(1<<(n-1));i++){
		fal=0;//更新此种横刀状态为正确,内部循环发现是因横刀出错时就一头冲出来
		memset(col,0,sizeof(col));
		memset(cnt,0,sizeof(cnt));
		memset(temp,0,sizeof(temp));
		vector<int> v;
		int count=0,ans=0, tmp=i;
		while(tmp){
			count++;
			if(tmp&1){//获取i中1的位置,存入这种状态下的每个横刀位置
				v.push_back(count);//v用来存横刀位置,若v里面为1,3,4,加入n后,表示横刀区间1-1,2-3,4-4,5-n
				ans++;
			}
			tmp/=2;
		}
		if(ans>k)continue;//特判
		v.push_back(n);
		int p=0,top=1,down;//top是该区间最上面元素位置,down是此横刀位置,p为当前的第几个横刀区间(
//第二个循环是切竖刀的,在每个竖位置遍历列区间,一旦某个横刀区间加上这个列超过答案就说明可以切竖刀了
		for(int j=1;j<=n;j++){
			p=0,top=1;//每切一次竖刀就重置一次
//第三个循环是遍历横刀区间的(我们要自上而下遍历每个区间)
			for(int x:v){//用x来访问v中的所有元素,取出每个横刀位置
				down=x;
				int now=get_sum(top,j,down,j);//求列区间和(列宽为1)
				if(now>m){//如果仅列区间已经大于答案就说明是横刀状态失误了,fal标记一下,直接冲到最外面
					fal=1; break;
				}
//求新的横刀区间(原横刀区间加列区间)
				cnt[++p]+=now;//将上个区间加上这个区间
				if(col[j-1]){
					cnt[p]=now;//上个位置被切过了,就说明我们不应该加的
				}
				temp[p]=now;//temp存每个列区间和
//判断该横刀区间,决策是否切竖刀
				if(cnt[p]>m){//该区间和大于答案,说明要切竖着在j-1的位置一刀,cnt再从第j列开始计算和(你只有犯错的时候才知道自己犯错了)
					col[j-1]=1;//更新竖切的位置和区间和
					cnt[p]=now;
					for(int ii=1;ii<p;ii++)cnt[ii]=temp[ii];//之前的区间也要因此而更新了,用上temp了
				}
				top=down+1;//top是下个区间最上面位置
			}
			if(fal)break;
		}
		if(fal)continue;
		for(int j=1;j<=n-1;j++)
			if(col[j])ans++;//col存放的竖切刀
		if(ans<=k)return true;
	}
	return false;
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++)//数据从1,1开始存,后面注意这点
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
			max_=max(max_,a[i][j]);
			sum[i][j]=a[i][j]+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
		}
		int l=0,r=2000*15*15;
		while(l<=r){
			int m=(l+r)>>1;
			if(check(m)) r=m-1;//刀数太少,说明应该再切小一点
			else l=m+1;
		}
		cout<<l<<'\n';
		return 0;
}

今天的确实有点难,嗯

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网上蛋糕售卖店管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;店员管理&#xff0c;用户管理&#xff0c;商品管理&#xff0c;基础数据管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;公告信息&#xff0c;商品…

MFC 解决Enter回车键和Esc取消键默认关闭窗口的三种方法

文章目录 问题描述问题原因解决办法方法一&#xff1a;在重载的PreTranslateMessage 函数中屏蔽回车和ESC 的消息方法二&#xff1a;重载OnOK函数方法三&#xff1a;将所有按钮类型设为普通按钮&#xff0c;并设置其中一个按钮为默认按钮 问题描述 一般情况下编写的MFC对话框程…

【如何在日志中输出精确到毫秒的时间戳】

1. 需求 在日志中输出精确到毫秒级的时间戳&#xff0c; 格式为&#xff1a;%Y-%m-%d %H:%M:%S.%MS 如&#xff1a;2024-05-30 22:33:25.821 2. 代码实现 #include <iostream> #include <chrono> #include <iomanip> #include <sstream> #include &…

锻压设备智能制造工厂物联数字孪生平台,推进制造业数字化转型

锻压设备智能制造工厂物联数字孪生平台&#xff0c;推进制造业数字化转型。随着全球制造业的飞速发展&#xff0c;数字化转型已经成为企业提升竞争力、实现可持续发展的关键。在锻压设备智能制造领域&#xff0c;工业物联数字孪生平台以其强大的数据集成、分析和管理能力&#…

k均值过程图解

k均值聚类实际上是数据空间质心的Voronoi 划分问题。

C语言 | Leetcode C语言题解之第124题二叉树中的最大路径和

题目&#xff1a; 题解&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ int max; int dfs(struct TreeNode* root){if(!root) return 0;int left dfs(root->left…

中继器、集线器、网桥、交换机、路由器和网关

目录 前言一、中继器、集线器1.1 中继器1.2 集线器 二、网桥、交换机2.1 网桥2.2 交换机 三、路由器、网关3.1 路由器3.2 网关 总结 前言 理解这些设备的关键是他们运行在不同的层次上。之所以存在不同层的问题&#xff0c;是因为不同的设备使用不同的信息来决定如何交换。在典…

AI大模型的创新之道:突破局限与引领未来

1、引言 随着人工智能技术的飞速发展&#xff0c;AI大模型已成为推动科技进步的重要力量。它们不仅拥有强大的数据处理能力和学习能力&#xff0c;还能在多个领域展现出超越人类智慧的潜力。然而&#xff0c;AI大模型也面临着诸多挑战和局限&#xff0c;如数据依赖、计算资源消…

[数据集][目标检测]剪刀石头布检测数据集VOC+YOLO格式1973张3类别

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

【Qt】【模型视图架构】代理模型示例

文章目录 1. 基本排序/过滤模型Basic Sort/Filter Model Example2. 自定义排序/过滤模型Custom Sort/Filter Model ExampleFilterLineEdit类定义及实现MySortFilterProxyModel类定义及实现 1. 基本排序/过滤模型Basic Sort/Filter Model Example 官方提供的基本排序/过滤模型示…

YOLOv5改进 | 添加注意力篇 | 利用YOLOv10提出的PSA注意力机制助力YOLOv5有效涨点(附代码 + 详细修改教程)

一、本文介绍 本文给大家带来的改进机制是YOLOv10提出的PSA注意力机制&#xff0c;自注意力在各种视觉任务中得到了广泛应用&#xff0c;因为它具有显著的全局建模能力。然而&#xff0c;自注意力机制表现出较高的计算复杂度和内存占用。为了解决这个问题&#xff0c;鉴于注意…

本地公网IP是什么?

本地公网IP&#xff08;Public IP Address&#xff09;是指分配给计算机或设备的可在互联网上直接访问的唯一标识符。每个连接到互联网的设备都会被分配一个公网IP&#xff0c;用于与其他设备进行通信。本地公网IP在网络通信中起到了非常重要的作用&#xff0c;为用户提供了方便…

Docker 简介和安装

目录 Docker 是什么 跟普通虚拟机的对比 打包、分发、部署 Docker 部署的优势 Docker 通常用来做什么 重要概念&#xff1a;镜像、容器 安装 镜像加速源 Docker 是什么 Docker 是一个应用打包、分发、部署的工具 你也可以把它理解为一个轻量的虚拟机&#xff0c;它只虚…

【创作活动】如何让大模型更聪明:提升智能的技术策略

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

前端框架安全防范

前端框架安全防范 在现代Web开发中&#xff0c;前端框架如Angular和React已经成为构建复杂单页面应用&#xff08;SPA&#xff09;的主流工具。然而&#xff0c;随着应用复杂度的增加&#xff0c;安全问题也变得越来越重要。本文将介绍如何在使用Angular和React框架时&#xf…

内网渗透-在HTTP协议层面绕过WAF

进入正题&#xff0c;随着安全意思增强&#xff0c;各企业对自己的网站也更加注重安全性。但很多web应用因为老旧&#xff0c;或贪图方便想以最小代价保证应用安全&#xff0c;就只仅仅给服务器安装waf。 本次从协议层面绕过waf实验用sql注入演示&#xff0c;但不限于实际应用…

mysql(数据库)可视化工具——Navicat Premium

Navicat Premium是一款功能强大的数据库管理工具&#xff0c;它支持多种数据库管理系统&#xff0c;包括MySQL、MariaDB、SQL Server、SQLite、Oracle和PostgreSQL等。Navicat Premium提供了直观的用户界面&#xff0c;使用户能够轻松地管理数据库结构、执行复杂的SQL查询、导入…

基于Django的博客系统之用HayStack连接elasticsearch增加搜索功能(五)

上一篇&#xff1a;搭建基于Django的博客系统数据库迁移从Sqlite3到MySQL&#xff08;四&#xff09; 下一篇&#xff1a;基于Django的博客系统之增加类别导航栏&#xff08;六&#xff09; 功能概述 添加搜索框用于搜索博客。 需求详细描述 1. 添加搜索框用于搜索博客 描…

1940java swing零售库存管理系统myeclipse开发Mysql数据库CS结构java编程

一、源码特点 java swing 零售库存管理系统 是一套完善的窗体设计系统&#xff0c;对理解SWING java 编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;&#xff0c;系统主要采用C/S模式开发。 应用技术&#xff1a;javamysql 开发工具&#xff1a;…

如何快速找到 RCE

背景介绍 本文将分享国外白帽子在‘侦察’阶段如何快速发现 RCE 漏洞的经历。以Apache ActiveMQ 的 CVE-2023–46604 为特例&#xff0c;重点介绍如何发现类似此类的漏洞&#xff0c;让我们开始吧。 快速发现过程 在‘侦察’阶段&#xff0c;白帽小哥会保持每周更新一次目标…