GPLT-2025年第十届团体程序设计天梯赛总决赛题解(共计266分)
今天偶然发现天梯赛的代码还保存着,于是决定写下这篇题解,也算是复盘一下了
L1本来是打算写的稳妥点,最后在L1-6又想省时间,又忘记了insert,replace这些方法怎么用,也不想花时间写一个文件测试,最后用了两个vector<int>a,b每次操作来回传数组的元素,以为实现起来很方便,最后反而写了个170行的屎山代码,花了一个多小时的时间debug最后还只拿了5分,属于是左右脑互博了...
L2的话,L2-2写着写着把无解-1忘了?L2-4少了一些边界条件
L3 最后15分钟发现L3-3很多人拿了16分,于是火急火燎写了一个暴力,怒拿1分,赛后看代码才发现把同一种情况下的乘法写成加法了
欲速则不达,以后做事还是慢慢来,先把基础打扎实。接下来要准备考研了,就当这是个提醒吧。
L1-105 珍惜生命
#include<bits/stdc++.h>
using namespace std;
#define _rep(i,a,b) for(int i=(int)(a);i<=(int)b;++i)
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
int n,m,k;
const int N=1e6+10;
void solve()
{cout<<"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.";
}
signed main()
{IOS;int T=1;
// cin>>T;while(T--)solve();return 0;
}
L1-106 偷感好重
#include<bits/stdc++.h>
using namespace std;
#define _rep(i,a,b) for(int i=(int)(a);i<=(int)b;++i)
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
int n,m,k;
const int N=1e6+10;
void solve()
{cin>>n>>m>>k;cout<<n+m+k<<'\n';
}
signed main()
{IOS;int T=1;
// cin>>T;while(T--)solve();return 0;
}
L1-107 高温补贴
按照题意模拟
#include<bits/stdc++.h>
using namespace std;
#define _rep(i,a,b) for(int i=(int)(a);i<=(int)b;++i)
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
int n,m,k;
const int N=1e6+10;
void solve()
{int t,s,t1;cin>>t>>s>>t1;if(t>=35&&s&&t1>=33)cout<<"Bu Tie\n"<<t;else if(t>=35&&!s&&t1>=33)cout<<"Shi Nei\n"<<t;else if(s)cout<<"Bu Re\n"<<t1;else cout<<"Shu Shi\n"<<t1;
}
signed main()
{IOS;int T=1;
// cin>>T;while(T--)solve();return 0;
}
L1-108 零头就抹了吧
找到2^i中第一个大于付的钱的i,然后输出2^(i-1)
#include<bits/stdc++.h>
using namespace std;
#define _rep(i,a,b) for(int i=(int)(a);i<=(int)b;++i)
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pb push_back
#define pp pop_back()
#define fi first
#define se second
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
int n,m,k;
void solve()
{cin>>n;int i=0;while((1<<i)<=n){i++;}cout<<(1<<(i-1));
}
signed main()
{IOS;int T=1;
// cin>>T;while(T--)solve();return 0;
}
L1-109 这是字符串题
#include<bits/stdc++.h>
using namespace std;
#define _rep(i,a,b) for(int i=(int)(a);i<=(int)b;++i)
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pb push_back
#define pp pop_back()
#define fi first
#define se second
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
int n,m,k;
const int N=1e6+10;
int a[N],b[N];
void solve()
{string s;cin>>s;_rep(i,0,25){cin>>a[i];}int res=0;for(auto i:s){res+=a[i-'a'];b[i-'a']++;}_rep(i,0,25){cout<<b[i]<<" \n"[i==25];}cout<<res<<endl;
}
signed main()
{IOS;int T=1;
// cin>>T;while(T--)solve();return 0;
}
L1-110 这不是字符串题
用一个自增的cnt和vector<int>a,b,cnt为奇数就把a的东西存到b去,反之
#include<bits/stdc++.h>
using namespace std;
#define _rep(i,a,b) for(int i=(int)(a);i<=(int)b;++i)
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pb push_back
#define pp pop_back()
#define fi first
#define se second
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
int n,m,k;
const int N=1e6+10;
vector<int>a,b;
int cnt;
void solve()
{cin>>n>>m;_rep(i,1,n){int x;cin>>x;a.pb(x);}while(m--){cnt++;int op;cin>>op;if(op==1){int l1,l2;cin>>l1;vector<int>c;while(l1--){int x;cin>>x;c.pb(x);}cin>>l2;vector<int>d;while(l2--){int x;cin>>x;d.pb(x);}int idx=-1;if(cnt&1){for(int i=0;i<(int)a.size();i++){if(i+(int)c.size()>(int)a.size())break;bool bl=true;for(int j=0,k=i;j<(int)c.size();j++,k++){if(c[j]!=a[k]){bl=false;break;}}if(bl){idx=i;break;}}}else{for(int i=0;i<(int)b.size();i++){if(i+(int)c.size()>(int)b.size())break;bool bl=true;for(int j=0,k=i;j<(int)c.size();j++,k++){if(c[j]!=b[k]){bl=false;break;}}if(bl){idx=i;break;}}}if(idx!=-1){if(cnt&1){bool bl=false;for(int i=0;i<(int)a.size();i++){if(idx<=i&&i<=idx+((int)c.size())-1){if(!bl){for(auto k:d){b.pb(k);}bl=true;}}else b.pb(a[i]);}a.clear();}else {bool bl=false;for(int i=0;i<(int)b.size();i++){if(idx<=i&&i<=idx+((int)c.size())-1){if(!bl){for(auto k:d){a.pb(k);}bl=true;}}else a.pb(b[i]);}b.clear();}}else cnt++;}else if(op==2){if(cnt&1){for(int i=0;i<(int)a.size();i++){if(!i)b.pb(a[i]);else {if((a[i]+a[i-1])%2==0){b.pb((a[i]+a[i-1])/2);}b.pb(a[i]);}}a.clear();}else {for(int i=0;i<(int)b.size();i++){if(!i)a.pb(b[i]);else {if((b[i]+b[i-1])%2==0){a.pb((b[i]+b[i-1])/2);}a.pb(b[i]);}}b.clear();}}else {int l,r;cin>>l>>r;l--,r--;if(cnt&1){for(int i=0;i<(int)a.size();i++){if(l<=i&&i<=r){b.pb(a[l+r-i]);}else b.pb(a[i]);}a.clear();}else{for(int i=0;i<(int)b.size();i++){if(l<=i&&i<=r){a.pb(b[l+r-i]);}else a.pb(b[i]);}b.clear();}}}if(cnt%2==0){for(int i=0;i<(int)a.size();i++){cout<<a[i]<<" \n"[i==(int)a.size()-1];}}else {for(int i=0;i<(int)b.size();i++){cout<<b[i]<<" \n"[i==(int)b.size()-1];}}
}
signed main()
{IOS;int T=1;
// cin>>T;while(T--)solve();return 0;
}
L1-111 大幂数
可以发现指数k(我的代码中是m)最大从31开始向下递减,每次暴力判断的时间复杂度是根号级别的,所以直接枚举指数然后判断即可
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define _rep(i,a,b) for(int i=(int)(a);i<=(int)b;++i)
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pb push_back
#define pp pop_back()
#define fi first
#define se second
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
int n,m,k;
const int N=1e6+10;
int qmi(int a,int b){int res=1;while(b){if(b&1)res=res*a;a=a*a;b>>=1;}return res;
}
vector<int>a,b;
int cnt;
int check(int k,int sum){int s=0;for(int i=1;;i++){s+=qmi(i,k);if(s==sum)return i;if(s>sum)return -1; }
}
void solve()
{cin>>n;int m=31;bool bl=false;while(m!=0){int t=check(m,n);if(t!=-1){_rep(i,1,t){cout<<i<<"^"<<m<<"+\n"[i==t];}bl=true;break;}m--;}if(!bl)cout<<"Impossible for "<<n<<".";
}
signed main()
{IOS;int T=1;
// cin>>T;while(T--)solve();return 0;
}
L1-112 现代战争
用一个优先队列每次弹出最大值,然后弹出过后的话就把坐标的行列标记为使用过,于是每一轮弹出坐标,直到那个弹出的坐标的行列没有被使用过,那个坐标就是这一轮要被删除的坐标
#include<bits/stdc++.h>
using namespace std;
#define _rep(i,a,b) for(int i=(int)(a);i<=(int)b;++i)
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pb push_back
#define pp pop_back()
#define fi first
#define se second
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
int n,m,k;
const int N=1e6+10;
int g[1010][1010];
bool st[1010][1010];
struct aa{int i,j,w;
};
struct cmp{bool operator()(aa a,aa b){return a.w<b.w;}
};
void solve()
{int n,m,k;cin>>n>>m>>k;priority_queue<aa,vector<aa>,cmp>p;_rep(i,1,n){_rep(j,1,m){int x;cin>>x;g[i][j]=x;p.push({i,j,x});}}while(k--){auto t=p.top();while(1){p.pop();if(!st[t.i][t.j])break;t=p.top();}for(int j=1;j<=n;j++){st[j][t.j]=true;}for(int j=1;j<=m;j++){st[t.i][j]=true;}}for(int i=1;i<=n;i++){bool bl=false;for(int j=1;j<=m;j++){if(st[i][j])continue;if(bl)cout<<" ";bl=true;cout<<g[i][j];}if(bl)cout<<'\n';}
}
signed main()
{IOS;int T=1;
// cin>>T;while(T--)solve();return 0;
}
L2-053 算式拆解
一个栈储存碰到的所有字母,遇到')'就一直弹出直到遇到‘(’,在这途中弹出的字符就是这一行的算式
#include<bits/stdc++.h>
using namespace std;
#define _rep(i,a,b) for(int i=(int)(a);i<=(int)b;++i)
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pb push_back
#define pp pop_back()
#define fi first
#define se second
#define all(x) (x).begin(),(x).end()
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
int n,m,k;
const int N=1e6+10;
void solve()
{string s;cin>>s;vector<char>v;for(auto i:s){if(i==')'){vector<char>now;while(v.back()!='('){now.pb(v.back());v.pp;}v.pp;reverse(all(now));for(int i=0;i<(int)now.size();i++){cout<<now[i];}cout<<'\n';}else v.pb(i);}
}
signed main()
{IOS;int T=1;
// cin>>T;while(T--)solve();return 0;
}
L2-054 三点共线
枚举前两维(y=0,1),判断第三维(y=2),把y=2时的x存到数组里,不过要注意存的时候防止出现负数,最坏情况下,第一维1e6,第二维-1e6,为了防止负数所以第三维要整体+3e6
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define double long double
#define _rep(i,a,b) for(int i=(int)(a);i<=(int)b;++i)
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pb push_back
#define pp pop_back()
#define fi first
#define se second
#define all(x) (x).begin(),(x).end()
#define laile cout<<"laile"<<endl;
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
int n,m,k;
const int N=1e6+10,INF=4e18;
vector<int>q[4];
bool st[4][N];
struct aa{int a,b,c;
};
bool cmp(aa a,aa b){if(a.b!=b.b)return a.b<b.b;return a.a<b.a;
}
vector<aa>res;
int has[6000001];
void solve()
{cin>>n;_rep(i,1,n){int x,y;cin>>x>>y;y++;if(y==3)has[x+3000010]++;else q[y].pb(x);}if(q[1].size())sort(all(q[1]));if(q[2].size())sort(all(q[2]));for(int i=0;i<(int)q[1].size();i++){int pre=0;if(i&&q[1][i]==q[1][i-1])continue;for(int j=0;j<(int)q[2].size();j++){if(j&&q[2][j]==q[2][j-1])continue;int sub=q[2][j]-q[1][i];if(has[q[2][j]+sub+3000010])res.pb({q[1][i],q[1][i]+sub,q[1][i]+2*sub});}}aa pre={-INF,-INF,-INF};sort(all(res),cmp);if(!res.size())cout<<"-1\n";else{for(auto i:res){if(pre.a!=i.a||pre.b!=i.b||pre.c!=i.c){cout<<"["<<i.a<<", 0] ["<<i.b<<", 1] ["<<i.c<<", 2]\n";}pre=i;}}
}
signed main()
{IOS;int T=1;
// cin>>T;while(T--)solve();return 0;
}
L2-055 胖达的山头
最小区间覆盖问题
先给区间排序,用multset存每个区间的右端点,每次找到multset中第一个大于当前区间左端点的点,然后把这个点替换成这个新的点,如果没找到就直接插入这个区间的右端点,最后multiset的元素个数就是最终答案
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define double long double
#define _rep(i,a,b) for(int i=(int)(a);i<=(int)b;++i)
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pb push_back
#define pp pop_back()
#define fi first
#define se second
#define all(x) (x).begin(),(x).end()
#define laile cout<<"laile"<<endl;
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
int n,m,k;
const int N=1e6+10,INF=4e18;
struct aa{int i,j,w;
};
struct cmp{bool operator()(aa a,aa b){return a.w<b.w;}
};
vector<PII>v;
PII get(string &s){int a=0,b=0,now=0;for(auto i:s){if(isdigit(i)){now=now*10+i-'0';}else if(i==' '){a=now;now=0;}}return {a,now};
}
void solve()
{cin>>n;string s;getline(cin,s);while(n--){getline(cin,s);PII t=get(s);v.pb(t);}sort(all(v));multiset<int>now;for(auto i:v){if(!now.size()){now.insert(i.se);}else{int ma=0,maidx;bool bl=false;auto t=now.lower_bound(i.fi);if(t==now.begin()){now.insert(i.se);}else{t--;int tt=i.se;now.erase(t);now.insert(tt);}}}cout<<now.size()<<'\n';
}
signed main()
{IOS;int T=1;
// cin>>T;while(T--)solve();return 0;
}
L2-056 被n整除的n位数
可以发现满足前i位被i整除的数字其实并不多,那么这题实际上就是直接暴力,这里我用的方法是逐位递增,用vector<int>v[16]存前i位满足在区间内部的所有数字,比如a=34567,b=66666,
首先v[1]显然可以存[3,4,5,6],
然后v[2]利用v[1]的值,遍历0~9,相当于枚举了30,31,32,33....40,41,....,68,69这些数字
然后用被 i 整除这个条件可以筛掉大部分数字,然后合法的又存到v[2]里,以此类推
#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize(2)
#define int long long
#define double long double
#define _rep(i,a,b) for(int i=(int)(a);i<=(int)b;++i)
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pb push_back
#define pp pop_back()
#define fi first
#define se second
#define all(x) (x).begin(),(x).end()
#define laile cout<<"laile"<<endl;
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
int n,m,k;
const int N=1e6+10,INF=4e18;
int qmi(int a,int b){int res=1;while(b){if(b&1)res=res*a;a=a*a;b>>=1;}return res;
}
struct aa{int i,j,w;
};
struct cmp{bool operator()(aa a,aa b){return a.w<b.w;}
};
int get(int x){if(x==0)return 1;int res=0;while(x){x/=10;res++;}return res;
}
bool check(int x){if(get(x)!=n)return false;vector<int>now;while(x){now.pb(x%10);x/=10;}reverse(all(now));int cnt=0,sum=0;for(auto i:now){sum=sum*10+i;cnt++;if(sum%cnt!=0)return false;}return true;
}
vector<int>v[20];
int la[20],lb[20];
int nine(int x){int res=9;_rep(i,1,x-1){res=res*10+9;}return res;
}
void solve()
{int a,b;cin>>n>>a>>b;bool bl=false;if(get(a)<n){int t=1;_rep(i,1,n-1){t*=10;}a=t;}else if(get(a)>n){cout<<"No Solution";return;}if(get(b)>n){int t=9;_rep(i,1,n-1){t=t*10+9;}b=t;}else if(get(b)<n){cout<<"No Solution";return;}vector<int>aa,bb;int c=a;while(c){aa.pb(c%10);c/=10;}reverse(all(aa));c=b;while(c){bb.pb(c%10);c/=10;}reverse(all(bb));for(int i=1;i<=n;i++){la[i]=la[i-1]*10+aa[i-1];lb[i]=lb[i-1]*10+bb[i-1];}_rep(i,0,9){v[1].pb(i);}_rep(i,2,n){_rep(k,0,9){for(auto j:v[i-1]){int t=((j*10)+k);if(t%i==0&&t>=la[i]&&t<=lb[i]){v[i].pb(t);}}}}vector<int>res;for(auto i:v[n]){if(check(i)){res.pb(i);bl=true;}}sort(all(res));if(!bl)cout<<"No Solution";else{res.erase(unique(all(res)),res.end());for(int i=0;i<(int)res.size();i++){cout<<res[i]<<'\n';}}
}
signed main()
{IOS;int T=1;
// cin>>T;while(T--)solve();return 0;
}
L3-040 人生就像一场旅行
类似最短路计数的思想
可以更新旅费(新路线旅费>原路线旅费)更新旅费和心情
否则如果新路线旅费=原路线旅费,更新心情更大的那条
#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize(2)
#define _rep(i,a,b) for(int i=(int)(a);i<=(int)b;++i)
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pb push_back
#define pp pop_back()
#define fi first
#define se second
#define all(x) (x).begin(),(x).end()
#define laile cout<<"laile"<<endl;
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
int n,m,k;
const int N=1e6+10,INF=4e18;
int qmi(int a,int b){int res=1;while(b){if(b&1)res=res*a;a=a*a;b>>=1;}return res;
}
int sum;
int g[510][510];
int happy[510][510];
int dist[510][510];
void solve()
{cin>>sum>>n>>m>>k;memset(g,0x3f,sizeof(g));_rep(i,1,n){g[i][i]=0;}_rep(i,1,m){int a,b,w,h;cin>>a>>b>>w>>h;g[a][b]=g[b][a]=w;happy[a][b]=happy[b][a]=h;}_rep(k,1,n){_rep(i,1,n){_rep(j,1,n){if(g[i][k]+g[k][j]<g[i][j]){g[i][j]=g[i][k]+g[k][j];happy[i][j]=happy[i][k]+happy[k][j];}else if(g[i][k]+g[k][j]==g[i][j])happy[i][j]=max(happy[i][k]+happy[k][j],happy[i][j]);}}}_rep(i,1,k){int x;cin>>x;vector<int>a,b;int ma=0;_rep(j,1,n){if(x==j)continue;if(g[x][j]<=sum){a.pb(j);if(happy[x][j]>ma){ma=happy[x][j];b.clear();b.pb(j);}else if(happy[x][j]==ma){b.pb(j);}}}if(!a.size()){cout<<"T_T\n";}else {sort(all(a));sort(all(b));for(int i=0;i<(int)a.size();i++){cout<<a[i]<<" \n"[i==(int)a.size()-1];}for(int i=0;i<(int)b.size();i++){cout<<b[i]<<" \n"[i==(int)b.size()-1];}}}
}
signed main()
{IOS;int T=1;
// cin>>T;while(T--)solve();return 0;
}
L3-041 影响力
按题意暴力20分
#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize(2)
#define int long long
#define _rep(i,a,b) for(int i=(int)(a);i<=(int)b;++i)
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pb push_back
#define pp pop_back()
#define fi first
#define se second
#define all(x) (x).begin(),(x).end()
#define laile cout<<"laile"<<endl;
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
int n,m,k;
const int N=1e6+10,INF=4e18;
vector<vector<int>>v(N);
void solve()
{cin>>n>>m;_rep(i,1,n){v[i].pb(0);_rep(j,1,m){int x;cin>>x;v[i].pb(x);}}_rep(i,1,n){_rep(j,1,m){int res=0;_rep(k,1,n){_rep(l,1,m){res+=v[i][j]*max(abs(k-i),abs(l-j));}}cout<<res<<" \n"[j==m];}}
}
signed main()
{IOS;int T=1;
// cin>>T;while(T--)solve();return 0;
}
L3-042 污染大亨
暴力dfs16分
有一个细节,dfs的时候会遍历到不同的游戏情况,在回溯完之后为了确定某个小镇是否被污染,判断污染的st数组可以直接开int型,每一次被污染就st[u]++,回溯就st[u]--,这样可以保证st[u]=0时走到这个分支时小镇从未被污染
#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize(2)
#define int long long
#define double long double
#define _rep(i,a,b) for(int i=(int)(a);i<=(int)b;++i)
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define pb push_back
#define pp pop_back()
#define fi first
#define se second
typedef pair<int,int> PII;
typedef pair<double,double> PDD;
int n,m,k;
const int N=1e6+10,INF=4e18,P=998244353;
vector<vector<int>>v(N);
int c[N];
int st[N];
int sum;
int qmi(int a,int b,int P){int res=1;while(b){if(b&1)res=res*a%P;a=a*a%P;b>>=1;}return res;
}
void infact(int u){sum++;st[u]++;for(auto i:v[u]){infact(i);}return;
}
void finfact(int u){st[u]--;for(auto i:v[u]){finfact(i);}return;
}
int res=0;
void dfs(int u,vector<int>&ve,int now){bool bl=false;_rep(i,1,n){if(st[i])continue;bl=true;sum=0;infact(i);dfs(u+1,ve,now*qmi(c[u],sum,P)%P);finfact(i);}if(!bl)res+=now,res%=P;
}
void solve()
{cin>>n;if(n==1){cout<<n<<'\n';}else {_rep(i,2,n){int x;cin>>x;v[x].pb(i);}_rep(i,1,n)cin>>c[i];vector<int>ve;dfs(1,ve,1);cout<<res;}
}
signed main()
{IOS;int T=1;
// cin>>T;while(T--)solve();return 0;
}
相关文章:
GPLT-2025年第十届团体程序设计天梯赛总决赛题解(共计266分)
今天偶然发现天梯赛的代码还保存着,于是决定写下这篇题解,也算是复盘一下了 L1本来是打算写的稳妥点,最后在L1-6又想省时间,又忘记了insert,replace这些方法怎么用,也不想花时间写一个文件测试,…...
基于SpringBoot的课程管理系统
前言 今天给大家分享一个基于SpringBoot的课程管理系统。 1 系统介绍 课程管理系统是一种专门为学校设计的软件系统,旨在帮助学校高效地管理和组织各类课程信息。 该系统通常包括学生、教师和管理员三大角色。 他们可以通过系统进行选课、查看课程表、考试、进…...
新品发布 | 6 秒全谱成像,VIX-N320 内置推扫式高光谱相机重磅发布
深圳市中达瑞和科技有限公司正式发布全新一代VIX-N320内置推扫式可见光近红外高光谱相机,一款集高速成像、高精度光谱分析与便携性于一体的革命性产品。以突破性技术重新定义光谱成像效率与精度,开启智能感知新纪元。作为国内唯一同时掌握凝采式、推扫式…...
手写深拷贝函数
在 JavaScript 中,深拷贝是指创建一个对象或数组的完全独立副本,包括其嵌套的对象或数组。这意味着修改副本不会影响原始对象。 以下是手写一个通用的深拷贝函数的实现: 深拷贝函数实现 function deepClone(target, map new WeakMap()) {//…...
智能电网第3期 | 配电房巡检机器人通信升级方案
随着电力系统智能化发展,配电房巡检机器人是保障电力设备安全稳定运行的重要工具,其通信稳定性关乎巡检效率与质量。配电房巡检智能化升级面临着多项挑战: 电磁干扰大:配电房电气设备密集,电磁干扰强,易造成…...
阿里云 AI 搜索开放平台:RAG智能化工作流助力 AI 搜索
——已获知乎作者【小小将】授权转载 最近AI圈的变化可谓是日新月异,随着大模型的技术突飞猛进,大模型的能力日益增强。这些都驱动着我们的搜索技术快速演进到了下一代,也就是 AI 搜索的技术。大模型的快速发展不仅重塑了搜索技术的基础&…...
同z科技面经
同z科技-2025-4-23 1.自我介绍 个人信息 校园经历 实习经历 项目经历 个人技能掌握 目前学习技术 2.封装缓存工具类怎么封装的 先介绍使用缓存的问题 解决的逻辑 封装的逻辑 应用 缓存穿透: 缓存雪崩: 缓存击穿: https://www…...
制作一款打飞机游戏19:碰撞检测
在这一章中,我们致力于解决碰撞检测问题,但它并不如我们所愿工作。 碰撞检测问题 今天我想解决的是碰撞检测问题,这个令人畏惧的碰撞检测。我理解,这里有很多复杂的if语句,但我们可以做到。 不过,在此之…...
python后端程序部署到服务器 Ubuntu并配合 Vue 前端页面运行
将 PyCharm 研发的 Web 后端系统程序部署到 Ubuntu 24.04 服务器并配合 Vue 前端页面运行,可按以下步骤操作: 1. 服务器环境准备 在开始部署之前,需要在 Ubuntu 24.04 服务器上安装必要的软件。 # 更新系统软件包 sudo apt update sudo ap…...
9N60-ASEMI无人机专用功率器件9N60
编辑:LL 9N60-ASEMI无人机专用功率器件9N60 型号:9N60 品牌:ASEMI 封装:TO-220F 最大漏源电流:9A 漏源击穿电压:600V 批号:最新 RDS(ON)Max:1.00Ω …...
Java单例模式详解:实现线程安全的全局访问点
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、什么是单例模式? 单例模式(Singleton Pattern)是一种创建型设计模式,它保证一个类仅有一个实例ÿ…...
【无人机】无人机光流模块Optical Flow设置(三),光流测距一体传感器的配置。凌启科技的光流测距一体模块的测试。
目录 1、光流测距一体模块的配置,详细步骤 1.1、连接 1.2、上位机使用 1.3、切换为PX4协议 2、适配PX4飞控,QGC上参数配置 2.0、安装连接 2.1、串口配置: 2.2、启用光流辅助功能 2.3、启用测距辅助功能 2.4、高度参考设置 2.5、重…...
电路中的DGND、GROUND、GROUND_REF的区别,VREF、VCC、VDD、VEE和VSS的区别?
目录 1 DGND、GROUND、GROUND_REF的区别 1.1 DGND(Digital Ground) 1.2 GROUND(Ground) 1.3 GROUND_REF(Ground Reference) 1.4 区别 2 VREF、VCC、VDD、VEE和VSS的区别 2.1 VREF(Refere…...
VSFTPD+虚拟用户+SSL/TLS部署安装全过程(踩坑全通)
Author : Spinach | GHB Link : http://blog.csdn.net/bocai8058文章目录 前言准备配置虚拟用户1.创建虚拟用户列表文件2.生成数据库文件3.设置虚拟用户独立访问权限 配置PAM认证1.创建PAM配置文件2.测试PAM认证 创建虚拟用户映射的系统用户生成SSL/TLS证书配置VSFTPD服务1…...
Java-File类详解(一篇讲透)
一:File类的实例化及常用方法 1.1 定义 1.2 构造器 (1)File(String pathname) 文件的路径表示方式 测试: (2)File(String parent,String child) 在父路径下创建子文件(没后缀是目录,…...
Representation Flow for Action Recognition论文笔记
原文笔记: What: 在本文中,我们提出了一种受光流算法启发的CNN层,用于学习动作识别的运动表示,而无需计算光流。我们的表示流层是一个完全可微分的层,旨在捕获模型中任何表示通道的“流”。其迭代流量优化…...
云计算领域需掌握的核心技术
云计算作为现代信息技术的核心基础设施,涵盖从基础资源管理到上层应用开发的完整技术栈。它依靠强大的计算能力,使得成千上万的终端用户不担心所使用的计算技术和接入的方式等都能够进行有效的依靠网络连接起来的硬件平台的计算能力来实施多种应用。 一、…...
Android仿今日头条Kotlin版本
软件信息 gradle-8.0Sdk信息 //编译版本 compileSdk33 //最小版本 minSdk24 //目标版本 targetSdk31Android Studio Giraffe | 2022.3.1 Patch 2(建议版本不要太低)MVVMAndroid Jetpack 项目注意 没有服务器,用的是Apifox模拟服务器返回&a…...
Javashop新零售电商系统:构建智能零售生态的终极解决方案
JavaShop Javashop新零售电商系统:构建智能零售生态的终极解决方案引言:数字化转型浪潮中的零售业变革Javashop新零售系统核心优势1. 全渠道融合:打破线上线下壁垒2. 智能化门店管理:赋能传统零售3. 智慧营销与会员运营 系统功能模…...
vscode如何多行同时编辑,vscode快速选中多行快捷键
目录 vscode如何多行同时编辑,vscode快速选中多行快捷键 一、实践情景 二、不同多选情景的操作方案 1、使用 Alt 鼠标点击选择任意行的任意位置 2、使用快捷键 Shift Alt 鼠标拖动 3、使用快捷键添加多行光标 4、结合正则表达式批量编辑 5、使用扩展插件&…...
珈和科技助力“农险提效200%”!“遥感+”技术创新融合省级示范项目荣登《湖北卫视》!
近日,湖北卫视《湖北十分》栏目报道了珈和科技遥感赋能农业保险创新,典型项目入选十大省级卫星应用示范标杆事迹,系统展示了珈和科技在卫星遥感与农业保险融合领域的创新成果。 作为空天农业领域的领军企业,珈和科技依托创新构建…...
UIAutomator 与 Playwright 在 AI 自动化中的界面修改对比
UIAutomator 与 Playwright 在 AI 自动化中的界面修改对比 在 AI 驱动的 UI 自动化中,Playwright(主要用于 Web)和 UIAutomator(用于 Android)的设计定位不同,对界面修改的支持也截然不同。下面从界面修改能力、API 设计、替代方案和实践建议等方面进行分析,对比两者在…...
Redisson Watchdog实现原理与源码解析:分布式锁的自动续期机制
引言 在分布式系统中,Redis分布式锁是解决资源竞争问题的常用方案。然而,当持有锁的客户端因GC、网络延迟或处理时间过长导致锁过期时,可能引发数据一致性问题。Redisson的Watchdog(看门狗)机制通过自动续期解决了这一…...
在C#串口通信中,一发一收的场景,如何处理不同功能码的帧数据比较合理,代码结构好
在 C# 串口通信的一发一收场景里,处理不同功能码的帧数据可采用以下合理的代码结构,它能让代码更具可读性、可维护性和可扩展性。 实现思路 定义帧结构:创建一个类来表示通信帧,其中包含功能码、数据等信息。功能码处理逻辑&…...
easypoi 实现word模板导出
特此非常致谢:easypoi实现word模板 基础的可以参考上文; 但是我的需求有一点点不一样。 这是我的模板:就是我的t.imgs 是个list 但是很难过的是easy poi 我弄了一天,我都没有弄出来嵌套list循环怎么输出显示,更难过…...
集结号海螺捕鱼服务器调度与房间分配机制详解:六
本篇围绕服务器调度核心逻辑进行剖析,重点讲解用户连接过程、房间分配机制、服务端并发策略及常见性能瓶颈优化。适用于具备中高级 C 后端开发经验的读者,覆盖网络会话池、逻辑服调度器与房间生命周期管理等关键模块。 一、服务器结构概览 整体系统采用…...
opencv--图像滤波
图像滤波 含义 方法 噪声是怎么产生的 线性滤波 概念 利用窗口对图像中的像素进行加权求和的滤波方式。 图像来源于小虎教程。 图像的滤波是二维滤波的过程。 滤波器窗口: 滤波器窗口(也称为卷积核或模板)是一个小的矩阵(通常为…...
uniapp返回上一页接口数据更新了,页面未更新
注意:不是组件套组件可以不使用setTimeout延时 返回上一页一般会走onshow,但是接口更新了页面未更新 onShow(() > {// 切换城市后重新调用数据if (areaId.value) {const timer setTimeout(async () > {timer && clearTimeout(timer);…...
redis 使用 Docker 部署 简单的Redis 集群(包括哨兵机制)
目录 环境准备 步骤 1:创建 Docker Compose 配置文件 步骤 2:创建配置文件 主节点配置文件 (redis.conf) 从节点配置文件 (slave.conf) 哨兵配置文件 (sentinel.conf) 步骤 3:启动 Redis 集群 步骤 4:验证集群状态 1. 检…...
私有知识库 Coco AI 实战(三):摄入 Elasticsearch 官方文档
相信经常使用 Elasticsearch 的小伙伴,难免要到 ES 官网查找资料,文档内容多难以查找不说,还有很多个版本,加上各种生态工具如 Filebeat、Logstash 头就更大了。今天我来介绍如何使用 Coco AI 快速搜索 Elasticsearch 官方文档。在…...
12-DevOps-Gitlab托管Jenkinsfile
前面通过执行脚本的方式,完成了pipline流水线的构建。脚本是保存在Jenkins中的,这种方式不利于迁移,也不利于查找脚本的历史变更信息。 通过把脚本放到GitLab中,然后在Jenkins中引用的方式来解决上述的问题。 创建Jenkinsfile文件…...
CSS3 基础(边框效果)
一、边框效果 属性功能示例值说明border-radius创建圆角border-radius: 20px;设置元素的圆角半径,支持像素(px)或百分比(%)。值为 50% 时可变为圆形。box-shadow添加阴影box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.5)…...
使用 VSCode 编写 Markdown 文件
目录 一、安装 Markdown 插件二、新建 Markdown 文档三、Markdown 基本语法目录和标题文本样式列表图片链接代码表格注脚与注释符号表情 四、将 Markdown 文档导出为 PDF 一、安装 Markdown 插件 参考文章:【[Markdown] 使用vscode开始Markdown写作之旅】 打开 VSco…...
搭建 Stable Diffusion 图像生成系统并通过 Ngrok 暴露到公网(实现本地系统网络访问)——项目记录
目录 📚 背景与需求 📝 需求明确 🔑 核心功能 🌍 网络优化 🛠️ 方案确认 ⚙️ 技术栈 📈 实现流程(Flask端口Ngrok注册authtoken) 🎯 优化目标 🔍 实…...
伺服器用什么语言开发呢?做什么用什么?
最近因为要评估帮合作对象做连接我们工具的语言翻译器,所以顺便做了一个小范围的调查,看看那些语言是应该在我们优先制作翻译器的部分,当然,各种语言在伺服器开发中其实各有拥护者,而选择也很常受到应用场景、产业特性…...
实现SpringBoot底层机制【Tomcat启动分析+Spring容器初始化+Tomcat 如何关联 Spring容器】
下载地址: https://download.csdn.net/download/2401_83418369/90675207 一、搭建环境 创建新项目 在pom.xml文件中导入依赖 (一定要刷新Maven)排除内嵌的Tomcat,引入自己指定的Tomcat <?xml version"1.0" enco…...
spark—kafka
消息队列与Kafka介绍 消息队列模式: 点对点模式和发布订阅模式。Kafka主要使用发布订阅模式。 Kafka角色: 包括broker、topic、分区、生产者、消费者、消费者组、副本、leader和follower 术语 解释 Broker 安装了kafka的节点 Topic 每条发…...
【AI 加持下的 Python 编程实战 2_09】DIY 拓展:从扫雷小游戏开发再探问题分解与 AI 代码调试能力(上)
DIY 拓展:从扫雷小游戏开发再探问题分解与 AI 代码调试能力(上) 1 起因 最近在看去年刚出了第 2 版《Learn AI-assisted Python Programming》,梳理完 第七章 的知识点后,总感觉这一章的话题很好——问题分解能力的培…...
【JVS更新日志】物联网、智能BI、智能APS 4.23更新说明!
项目介绍 JVS是企业级数字化服务构建的基础脚手架,主要解决企业信息化项目交付难、实施效率低、开发成本高的问题,采用微服务配置化的方式,提供了低代码数据分析物联网的核心能力产品,并构建了协同办公、企业常用的管理工具等&…...
品融电商:领航食品类目全域代运营,打造品牌增长新引擎
品融电商:领航食品类目全域代运营,打造品牌增长新引擎 在竞争激烈的电商市场中,食品类目因其高频消费与强复购属性,成为品牌必争之地。然而,行业同质化严重、用户心智难突破、流量成本攀升等痛点,让许多食…...
非关系型数据库 八股文 Redis相关 缓存雪崩 击穿 穿透
目录 图 缓存雪崩 大量数据同时过期解决方案 也有可能是 Redis 挂了 故障 缓存击穿 用互斥锁解决 热点数据永远不过期 缓存穿透 重点 可能的原因 限制 请求的 访问 缓存空值或者默认值 布隆过滤器(重要) 总结 参考资料 图 缓存雪崩 缓存雪崩是指大量缓存数据同时…...
uniapp自定义拖拽排列
uniapp自定义拖拽排列并改变下标 <!-- 页面模板 --> <template><view class"container"><view v-for"(item, index) in list" :key"item.id" class"drag-item" :style"{transform: translate(${activeInde…...
汽车免拆诊断案例 | 2013款大众辉腾车发动机抖动
故障现象 一辆2013款大众辉腾车,搭载CMV发动机(燃油喷射方式为缸内直喷),累计行驶里程约为21.8万km。该车发动机怠速、加速时均有抖动,且组合仪表上的发动机故障灯异常点亮。 故障诊断 用故障检测仪检测࿰…...
【氮化镓】同质结GaN PiN二极管的重离子单粒子烧毁SEB
2025 年,范德堡大学的 A. S. Senarath 等人通过实验研究的方法,深入探究了在同质结 GaN 垂直 PIN 二极管中,边缘终止设计对重离子诱发的单粒子漏电(SELC)和单粒子烧毁(SEB)的影响。该研究获得了多个美国军方机构的支持,包括空军卓越辐射效应中心、海军研究办公室、能源…...
Java基础 4.23
1.包的命名 命名规则 只能包含数字 字母 下划线 小圆点 但不能用数字开头 不能是关键字或保留字 命名规范 一般是小写字母小圆点 一般是 com.公司名.项目名.业务模块名 比如 com.sina.crm.user 用户模块com.sina.crm.order 订单模块com.sina.crm.utils 工具类 2.常用的包…...
【学习准备】算法和开发知识大纲
1 缘起 今年(2025年)的职业升级结果:不通过。没办法升职加薪了。 需要开始完善学习,以应对不同的发展趋势,为了督促自己学习,梳理出相关学习大纲。 分为算法和开发两部分。 算法,包括基础算法和…...
Godot学习-3D基本环境设置以及3D角色移动
文章目录 一、新建项目和导入资产二、创建玩家场景1.修改模型节点类型为CharacterBody3D2.添加碰撞对象并且设置碰撞区域3.根据动画的运动状态调整碰撞区域 三、使用CSGMesh3D创建地面1.设置网格尺寸2.设置网格材质 四、添加3D相机和光照五、为角色移动编写代码1.基本移动和旋转…...
高效并发编程:无锁编程
无锁编程是一种并发编程的技术,旨在避免使用传统的锁机制来保护共享数据。相比有锁编程,无锁编程可以提供更高的并发性能和可伸缩性。在无锁编程中,线程或进程通过使用原子操作、CAS(Compare-and-Swap)等技术来实现对共…...
Java与C语言核心差异:从指针到内存管理的全面剖析
🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:AI 【前言】 在计算机编程领域,Java和C语言都是极具影响力的编程语言。Java以其跨平台性、安全性和面向对象…...
亚远景-基于ASPICE标准的汽车软件过程优化路径
基于ASPICE标准的汽车软件过程优化路径可以从以下几个方面展开: 1. 评估现状与设定目标 评估现状 :企业需要对当前的软件开发过程进行全面评估,识别与ASPICE标准之间的差距,明确薄弱环节。 设定目标 :根据评估结果和…...