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

牛客周赛 Round 39(A,B,C,D,E,F,G)

比赛链接

官方题解(视频)

B题是个贪心。CD用同余最短路,预处理的完全背包,多重背包都能做,比较典型。E是个诈骗,暴力就完事了。F是个线段树。G是个分类大讨论,出题人钦定的本年度最佳最粪 题目


A 小红不想做炸鸡块粉丝粉丝题

思路:

签到

code:

#include <iostream>
#include <cstdio>
using namespace std;int a,tot;int main(){cin>>a;tot=a;for(int i=2,t;i<=6;i++)cin>>t,tot+=t;if(a*30>=tot)puts("No");else puts("Yes");return 0;
}

B 小红不想做鸽巢原理

思路:

emmmm不太清楚和鸽巢原理有啥关系,就是个贪心的思路。

因为是 k k k k k k 个取走,所以假设一共有 t o t tot tot 个小球,最后会剩下 t o t % k tot\%k tot%k 个小球。因为要剩下的种类尽可能少,那么我们尽可能留下数量多的种类就行了。

code:

#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
const int maxn=1e5+5;
typedef long long ll;int n,k;
ll tot=0;
set<int> S;int main(){cin>>n>>k;for(int i=1,t;i<=n;i++){cin>>t;S.insert(t);tot+=t;}tot%=k;if(tot==0){cout<<0<<endl;return 0;}int ans=0;for(auto it=S.rbegin();it!=S.rend();it++){ans++;if(tot>*it)tot-=*it;else break;}cout<<ans<<endl;return 0;
}

C,D 小红不想做完全背包

思路:

和寒假营第二场的D题是同种类型的题,做法有三:同余最短路,带预处理的完全背包,多重背包。

因为我们只想要是 p p p 的倍数,而这个数是什么我们不关心,所以我们用到的数都直接模 p p p 即可,当模 p p p 等于零的时候就是 p p p 的倍数了,这就算是比较典型板子 的带同余的完全背包问题了。

它和一般的完全背包还不太一样,普通的完全背包跑一趟就够了,因为重量不会无缘无故减少,我们只要从小到大跑一遍就能考虑到所有情况了,但是带同余的话重量就有可能减少了。比如容量为 7 7 7,物品的重量为 3 3 3,不带只跑一遍和带了跑到重复为止的结果是不一样的,如下图:

容量:0 1 2 3 4 5 6不带:0 0 1 0 0 2 0
带了:5 3 1 6 4 2 7

一般来说,我们从某个位置出发,为了跑到第一次重复,至少需要跑 p 2 g c d ( a i , p ) \dfrac {p^2}{gcd(a_i,p)} gcd(ai,p)p2 次(设 a i ∗ x ≡ a i ( m o d p ) a_i*x\equiv a_i\pmod p aixai(modp),解出来 x = p g c d ( a i , p ) + 1 x=\dfrac p{gcd(a_i,p)}+1 x=gcd(ai,p)p+1,也就是说一趟只用跑 p g c d ( a i , p ) \dfrac p{gcd(a_i,p)} gcd(ai,p)p 次就可以停了,再以每位置开始跑一趟,一共 p ∗ p g c d ( a i , p ) p*\dfrac p{gcd(a_i,p)} pgcd(ai,p)p 次)。再算上有 n n n 件物品,这样时间复杂度就爆了, 最坏情况 O ( n ∗ p 2 ) O(n*p^2) O(np2)

大致代码如下,TLE了(数据太弱了,居然就T了三个点,而且如果就算不枚举开始位置,只跑一次,甚至只WA三个点,经过某些神秘的顺序安排,居然还能AC,给人一种做法是正确的的错觉)

	cin>>n>>p;vector<int> a(n);for(int i=0,t;i<n;i++){cin>>t;a[i]=t%p;}sort(a.begin(),a.end());a.erase(unique(a.begin(),a.end()),a.end());n=a.size();vector<int> dp(p+5,1e9);for(auto x:a){dp[x]=1;for(int idx=0;idx<p;idx++)for(int i=1,t=(idx+x)%p;i<p/gcd(x,p);i++,t=(t+x)%p)dp[(t+x)%p]=min(dp[(t+x)%p],dp[t]+1);}cout<<dp[0];

发现我们没必要从每个位置开始都跑 p g c d ( a i , p ) \dfrac p{gcd(a_i,p)} gcd(ai,p)p 次,我们用多个物品得到的重量是固定的,我们不如一开始就处理好,然后直接拿来用。具体来说,设 c s t [ i ] cst[i] cst[i] 表示增加重量为 i i i 需要使用多少个物品,多个物品可以都处理到一个 c s t [ i ] cst[i] cst[i],预处理的时间复杂度为 n ∗ p g c d ( a i , p ) n*\dfrac p{gcd(a_i,p)} ngcd(ai,p)p,使用的时候直接把 c s t [ i ] cst[i] cst[i] 当作物品跑完全背包,每个物品只跑一趟即可。

为什么预处理后不需要跑多趟了?原来我们用物品 a i a_i ai 跑第一次的时候,这时相当于用 c s t [ a i % p ] cst[a_i\%p] cst[ai%p] 跑一次,原来我们用物品 a i a_i ai 跑第二次的时候,这时相当于用 c s t [ 2 ∗ a i % p ] cst[2*a_i\%p] cst[2ai%p] 跑一次,原来我们用物品 a i a_i ai 跑第三次的时候,这时相当于用 c s t [ 3 ∗ a i % p ] cst[3*a_i\%p] cst[3ai%p] 跑一次,类推,甚至我们多个物品同时处理后,这个 c s t cst cst 值还会更小,答案更优。因此我们原本每个位置每个物品跑多次,现在只要每个位置每个 c s t cst cst 跑一次就可以了。

因此完全背包部分时间复杂度就优化为了 O ( p 2 ) O(p^2) O(p2)。总的时间复杂度就优化为了 O ( n ∗ p g c d ( a i , p ) + p 2 ) O(\dfrac {n*p}{gcd(a_i,p)}+p^2) O(gcd(ai,p)np+p2),最坏 O ( n p + p 2 ) O(np+p^2) O(np+p2)

另外同余最短路和多重背包也是正确的做法,数据弱,奇奇怪怪的做法也能日过去。

code:

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn=2005;int n,p;
int gcd(int a,int b){while(b)b^=a^=b^=a%=b;return a;
}int main(){cin>>n>>p;vector<int> a(n);for(int i=0,t;i<n;i++){cin>>t;a[i]=t%p;}sort(a.begin(),a.end());a.erase(unique(a.begin(),a.end()),a.end());n=a.size();vector<int> cst(p+5,1e9),dp(p+5,1e9);for(auto x:a){for(int i=1,cur=x;i<=p;i++,cur=(cur+x)%p){cst[cur]=min(cst[cur],i);}}for(int i=0;i<p;i++){int x=cst[i];//i步数 x代价 dp[i]=min(dp[i],x);for(int j=i;j<p+i;j++)dp[j%p]=min(dp[j%p],dp[(j-i+p)%p]+x);}cout<<dp[0];return 0;
}

E 小红不想做莫比乌斯反演杜教筛求因子和的前缀和

思路:

之前练习赛出了一个名字差不多的题,特难。这次出题人估计是想骗做题人给自己上压力,不过可惜放在了 E E E 题的位置上。没骗到。

枚举长 n n n 和宽 m m m,然后算出 p p p,统计答案个数即可。

code:

#include <iostream>
#include <cstdio>
using namespace std;int n,m,p,x;
int ans=0;int main(){cin>>n>>m>>p>>x;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if((x-i*j)%(2*(i+j))==0 && (x-i*j)/(2*(i+j))>=1 && (x-i*j)/(2*(i+j))<=p)ans++;cout<<ans;return 0;
}

F 小红不想做模拟题

思路:

区间修改,区间查询,还是比较明显能想到线段树的。

当我们区间推平时,比如推平了 a a a 串的区间 [ l , r ] [l,r] [l,r],把它变成 1 1 1,那么这一段区间 1 1 1 的对数就变成了 b b b 串这段区间中 1 1 1 的个数,同理推平另一个串。所以我们为了维护区间 1 1 1 的对数,还需要分别维护住 a , b a,b a,b 串区间内 1 1 1 的个数。

另外因为这个题只进行了一个简单的推平操作,所以我们也不需要写懒节点并将节点信息向下传递,我们只要在线段树节点上打个标记,表示是否推平了,之后修改或者查询的时候查到标记就直接返回就行了。

code:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=1e5+5;int n,q;
string str[2];struct segment_tree{#define ls p<<1#define rs p<<1|1struct Node{int l,r;int a,b;//区间内 a串1的个数,b串1的个数int sam;//ab串同为1的位置的个数bool fa,fb;//是否填平Node(int l=0,int r=0,int a=0,int b=0,int sam=0,bool fa=false,bool fb=false):l(l),r(r),a(a),b(b),sam(sam),fa(fa),fb(fb){}; }tr[maxn<<4];void push_up(int p){auto& [l,r,a,b,sam,fa,fb]=tr[p];a=(fa)?r-l+1:tr[ls].a+tr[rs].a;b=(fb)?r-l+1:tr[ls].b+tr[rs].b;if(fa)sam=tr[p].b;else if(fb)sam=tr[p].a;else sam=tr[ls].sam+tr[rs].sam;}void build(int p,int l,int r){tr[p].l=l;tr[p].r=r;if(l==r){tr[p].a=(str[0][l-1]=='1');tr[p].b=(str[1][l-1]=='1');tr[p].sam=(tr[p].a && tr[p].b);return;}int mid=l+r>>1;build(ls,l,mid);build(rs,mid+1,r);push_up(p);}void print(int p,int l,int r){printf("%d [%d,%d]:%d %d %d\n",p,l,r,tr[p].a,tr[p].b,tr[p].sam);if(l==r){return;}int mid=l+r>>1;print(ls,l,mid);print(rs,mid+1,r);}void print(){print(1,1,n);}void modify(int p,int l,int r,int L,int R,bool st){if(L<=l && r<=R){if(st){//填平a串 tr[p].a=r-l+1;tr[p].fa=true;tr[p].sam=tr[p].b;}else {//填平b串 tr[p].b=r-l+1;tr[p].fb=true;tr[p].sam=tr[p].a;}return;}int mid=l+r>>1;if(mid>=L)modify(ls,l,mid,L,R,st);if(mid<R)modify(rs,mid+1,r,L,R,st);push_up(p);}int q(){return tr[1].sam;}#undef ls#undef rs
}tr;int main(){
//	cin.tie(0)->sync_with_stdio(false);cin>>n>>str[0]>>str[1];tr.build(1,1,n);for(cin>>q;q;q--){char ch;int l,r;cin>>ch>>l>>r;tr.modify(1,1,n,l,r,(ch=='A'));cout<<tr.q()<<endl;
//		tr.print();
//		cout<<endl;}return 0;
}

G 小红不想做平衡树

思路:

我们发现,在一个数列里,数列一定是升序段降序段交替出现的,比如:升序-降序-升序-降序…,或者 降序-升序-降序-升序…。

我们选择一段区间,然后翻转其某个子段,使得反转后成为一个升序序列,有五种可能的情况(因为题目保证了数列中数各不相同,所以这里不讨论数值相等的情况,下面默认如此):

  1. 整段升序。
  2. 整段降序。
  3. 先升序,后降序。而且第一段最大值小于第二段最小值。
  4. 先降序,后升序。而且第一段最大值小于第二段最小值。
  5. 先升序,后降序,再升序。第一段最大值小于第二段最小值,且第二段最大值小于第三段最小值。

大概示例图如下:
在这里插入图片描述

我们对每种情况分别讨论,然后统计答案即可。

不过实际在写的时候会非常麻烦,因为前一段的末尾那个数正好就是后一段开头的那个数,导致上面的五种情况会出现重叠计数的情况。比如第三种情况中,第二段只取第一个数时,统计出来的答案就会和第一种情况完全重复,再比如第五种情况中第一段只选第一个数时统计出来的答案都和第四种情况出现重复等。在官方题解的写法中,细节也是蛮多的。下面只讲我的写法,和题解不太一样。

回到开头,在一个数列里,数列一定是升序段降序段交替出现的,而升序段和降序段交界处的那个数是两段共用的。这种“转折点”有两种类型:升序变降序(形如 ^),降序变升序(形如 √)。而且是交替出现的。

我们可以把这些转折点处理出来,然后根据转折点来统计答案。虽然仍然会出现重复的情况,但是更直观一些(大概?)

code:

#include <iostream>
#include <cstdio>
#include <vector>
#define pii pair<int,int>
using namespace std;
typedef long long ll;
const int maxn=2e5+5;int n,a[maxn];int main(){cin>>n;for(int i=1;i<=n;i++)cin>>a[i];ll ans=0;int st=-1;//第一个 ^ 点的位置vector<int> ver;for(int i=2,f;i<n;i++){f=-1;if(a[i-1]<a[i] && a[i]>a[i+1])f=0;// ^if(a[i-1]>a[i] && a[i]<a[i+1])f=1;// √if(!~st)st=f;if(~f)ver.push_back(i);}int tl=1,len,tn=ver.size();//1 2for(auto i:ver){len=i-tl+1;ans+=1ll*(len+1)*len/2;tl=i;}len=n-tl+1;ans+=1ll*(len+1)*len/2;ans-=tn;for(int i=st,id,l,r;i<ver.size();i+=2){//3id=ver[i];l=(i==0)?1:ver[i-1];r=(i==ver.size()-1)?n:ver[i+1];for(int j=id+1;j<=r;j++){//这边从id+1的位置开始统计,当j=id时会和情况2重复if(a[j]>a[id-1])ans+=id-l;else break;}}for(int i=st^1,id,l,r;i<ver.size();i+=2){//4id=ver[i];l=(i==0)?1:ver[i-1];r=(i==ver.size()-1)?n:ver[i+1];for(int j=id-1;j>=l;j--){//这边从id-1的位置开始统计,当j=id时会和情况1重复if(a[j]<a[id+1])ans+=r-id;else break;}}for(int i=st,id1,id2,l,r;i+1<ver.size();i+=2){//5id1=ver[i];id2=ver[i+1];l=(i==0)?1:ver[i-1];r=(i+1==ver.size()-1)?n:ver[i+2];if(a[id1-1]<a[id2] && a[id1]<a[id2+1])ans+=1ll*(id1-l)*(r-id2);}cout<<ans<<endl;return 0;
}

相关文章:

牛客周赛 Round 39(A,B,C,D,E,F,G)

比赛链接 官方题解&#xff08;视频&#xff09; B题是个贪心。CD用同余最短路&#xff0c;预处理的完全背包&#xff0c;多重背包都能做&#xff0c;比较典型。E是个诈骗&#xff0c;暴力就完事了。F是个线段树。G是个分类大讨论&#xff0c;出题人钦定的本年度最佳最粪 题目…...

解锁区块链技术的潜力:实现智能合约与DApps

在数字时代&#xff0c;区块链技术正迅速成为重塑多个行业的革命性力量。从金融服务到供应链管理&#xff0c;再到数字身份验证&#xff0c;区块链提供了一种去中心化、安全和透明的数据处理方式。在本文中&#xff0c;我们将深入探讨区块链技术&#xff0c;特别是智能合约和去…...

MAC OS关闭SIP(navicat 无法保存密码)

最近安装navicat&#xff08;16.3.7&#xff09;时,安装后无法保存密码,保存密码会报错如下&#xff1a; 因为用的破解版&#xff0c;一开始是打不开的&#xff0c;用自带的修复软件修复后就可以打开了&#xff0c;但是保存密码就会报错&#xff0c;按照网上的一些操作 1、卸载…...

阿里云服务器带宽价格全解析,附报价单

阿里云服务器公网带宽怎么收费&#xff1f;北京地域服务器按固定带宽计费一个月23元/M&#xff0c;按使用流量计费0.8元/GB&#xff0c;云服务器地域不同实际带宽价格也不同&#xff0c;阿里云服务器网aliyunfuwuqi.com分享不同带宽计费模式下带宽收费价格表&#xff1a; 公网…...

Day36|贪心算法part05:435. 无重叠区间、763.划分字母区间、56. 合并区间

435. 无重叠区间 有了上题射气球的因子&#xff0c;这题也就有思路了&#xff0c;反正无脑排序就行了&#xff1a; 首先将所有区间按照end的大小从小到大排序&#xff1b;选取最早end为起始x_end遍历所有区间&#xff0c;如果该区间的start比end大&#xff08;可重叠&#xf…...

棋牌室计时吧台计费收费灯控管理系统软件操作流程

棋牌室计时吧台计费收费灯控管理系统软件操作流程 一、前言 以下软件操作教程以&#xff0c;佳易王棋牌桌球计时计费管理系统软件灯控版V17.87为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 该计时计费软件可以是棋牌和桌球混合同时计时计费 …...

【实践篇】RabbitMQ实现队列延迟功能汇总

前言 记录下RabbitMQ实现延迟队列功能的所有实践内容。 前期准备&#xff0c;需要安装好docker、docker-compose的运行环境。 一、安装RabbitMQ 开启RabbitMQ的WEB管理功能。-CSDN博客 二、实现延迟队列的两种方式 RabbitMQ实现延迟队列的两种方式。-CSDN博客 三、实践文…...

EditPlus来啦(免费使用!)

hello&#xff0c;我是小索奇 今天推荐一款编辑器&#xff0c;是索奇学习JavaSE时入手滴&#xff0c;非常好用哈&#xff0c;小索奇还是通过老杜-杜老师入手滴&#xff0c;相信很多人也是通过老杜认识嘞&#xff0c;来寻找破解版或者准备入手这个间接使用的编辑器~ EditPlus是…...

蓝桥杯22年第十三届省赛-数组切分|线性DP

题目链接&#xff1a; 蓝桥杯2022年第十三届省赛真题-数组切分 - C语言网 (dotcpp.com) 1.数组切分 - 蓝桥云课 (lanqiao.cn) 这道题C语言网数据会强一些。 说明&#xff1a; 对于一个切分的子数组&#xff0c;由于数组是1-N的一个排列&#xff0c;所以每个数唯一 可以用子…...

小米汽车:搅动市场的鲶鱼or价格战砧板上的鱼肉?

3月28日晚&#xff0c;备受关注的小米汽车上市发布会召开&#xff0c;小米集团董事长雷军宣布小米SU7正式发布。小米汽车在带飞股价的同时&#xff0c;二轮订购迅速售尽。 图一&#xff1a;小米集团股价 雷军口中“小米汽车迈出的第一步&#xff0c;也是人生最后一战的开篇”&a…...

Docker 学习笔记(五):梳理 Docker 镜像知识,附带 Commit 方式提交镜像副本,安装可视化面板 portainer

一、前言 记录时间 [2024-4-10] 前置文章&#xff1a; Docker学习笔记&#xff08;一&#xff09;&#xff1a;入门篇&#xff0c;Docker概述、基本组成等&#xff0c;对Docker有一个初步的认识 Docker学习笔记&#xff08;二&#xff09;&#xff1a;在Linux中部署Docker&…...

K8S node节点执行kubectl get pods报错

第一个问题是由第二个问题产生的&#xff0c;第二个问题也是最常见的 网上找的都是从master节点把文件复制过来&#xff0c;这样确实可以解决&#xff0c;但是麻烦&#xff0c;有一个node节点还好&#xff0c;如果有多个呢&#xff1f;每个都复制吗&#xff1f;下面是我从外网…...

C++简单日志系统

需求描述 日志等级&#xff1a;定义一个枚举类型 LogLevel&#xff0c;包含至少四个等级&#xff1a;DEBUG、INFO、WARNING、ERROR。日志记录&#xff1a;实现一个 Logger 类&#xff0c;包含以下功能&#xff1a; 一个静态方法 log&#xff0c;接受 LogLevel 和一个字符串作为…...

MySQL基础练习题:习题21-25

这部分主要是为了帮助大家回忆回忆MySQL的基本语法&#xff0c;数据库来自于MySQL的官方简化版&#xff0c;题目也是网上非常流行的35题。这些基础习题基本可以涵盖面试中需要现场写SQL的问题。 列出在部门sales工作的员工的姓名&#xff0c;假定不知道销售部的部门编号 sele…...

全面的网络流量监控

流量监控指的是对数据流进行的监控&#xff0c;通常包括出数据、入数据的速度、总流量。通过网络流量监控&#xff0c;组织可以确保只有业务关键型流量通过网络传输&#xff0c;并限制不需要的网络流量&#xff0c;从而提高网络效率&#xff0c;又可以防止停机、减少 MTTR、帮助…...

探索网络爬虫:技术演进与学习之路

网络爬虫及IP代理池 前言爬虫技术的演进最新的爬虫技术爬虫技术学习路线 前言 在信息时代&#xff0c;网络爬虫技术作为获取和处理网络数据的重要手段&#xff0c;已经成为数据科学、机器学习和许多商业应用的基石。从简单的HTML页面抓取到复杂的动态内容采集&#xff0c;爬虫…...

目标检测——色素性皮肤病数据集

一、重要性及意义 首先&#xff0c;色素性皮肤病变是一类常见的皮肤疾病&#xff0c;其发病率有逐年增高的趋势。这些病变可能由遗传或环境因素导致黑素细胞生成异常&#xff0c;如黑色素瘤等。黑色素瘤具有极高的恶性率和致死率&#xff0c;而且恶化可能性大&#xff0c;容易…...

Unity3D 打空包与远程资源更新详解

前言 在游戏开发过程中&#xff0c;打包和远程资源更新是非常重要的步骤&#xff0c;本文将详细介绍Unity3D中如何进行打空包和远程资源更新。 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;希望大家可以点击进来一起交流一下开发经验呀&#xff01; 一、打空包 …...

32单片机入门持续更新中

配套资料为野火霸道V2 初识 STM32 4.1 什么是 STM32 STM32&#xff0c;从字面上来理解&#xff0c;ST 是意法半导体&#xff0c;M 是 Microelectronics 的缩写&#xff0c;32 表示 32 位&#xff0c;合起 来理解&#xff0c;STM32 就是指 ST 公司开发的 32 位微控制器。在如今…...

蓝桥杯 每天2题 day6

碎碎念&#xff1a;哇咔咔 要不是中间缺勤一天就圆满day7了&#xff01;最后一晚上&#xff01;写题复习哇咔咔 唉&#xff0c;睡了一觉就看不下去了&#xff0c;&#xff0c;&#xff0c;看看之前的笔记洗洗睡觉&#xff0c;&#xff0c;&#xff0c; 记得打印准考证带好东西…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...