蓝桥杯2024国赛--备赛刷题题单

news2025/2/26 5:31:18

1.游戏(单调队列)

注意如果结果是分数,直接设置变量为double,最好不要使用把int类型乘1.0变成分数来计算。

#include <iostream>
#include <queue>
using namespace std;
const int N=1e5+10;
//滑动窗口大小为k,最大值为P,最小值为Q,K=P-Q
//窗口个数为cnt=n-k+1
//所有情况为all=cnt*cnt
//期望值为(K1+K2+...+Kall)/all
//由于熊大选框和熊二选框的情况是一样的,因此只需要
//(K1+K2+...+Kcnt)/cnt
int a[N];
int wd[N];
deque<int>q;//双端队列
int main()
{
  int n,k;
  scanf("%d %d\n",&n,&k);
  for(int i=1;i<=n;i++)
  {
    scanf("%d",&a[i]);
  }
  double sump=0;//窗口最大值加和
  for(int i=1;i<=n;i++)
  {
    while(!q.empty()&&a[q.back()]<a[i])q.pop_back();
    q.push_back(i);//4 3 2 1...(从大到小的窗口)a[i]<=a[q.back()]才加入
    if(i>=k)//大于等于窗口大小才开始计算答案
    { //不在窗口内的下标pop掉
      while(!q.empty()&&q.front()<=i-k)q.pop_front();
      sump+=a[q.front()];
    }
  }
  q.clear();//注意要把队列清空!
  double sumq=0;//窗口最小值加和
  for(int i=1;i<=n;i++)
  {
    while(!q.empty()&&a[q.back()]>a[i])q.pop_back();
    q.push_back(i);//1 2 3 4...(从小到大的窗口)a[i]>=a[q.back()]才加入
    if(i>=k)//大于等于窗口大小才开始计算答案
    { //不在窗口内的下标pop掉
      while(!q.empty()&&q.front()<=i-k)q.pop_front();
      sumq+=a[q.front()];
    }
  }
  printf("%.2lf\n",(sump-sumq)/(n-k+1));
  return 0;
}

2.01游戏(DFS剪枝)

#include<iostream>
using namespace std;
char a[15][15];
bool flag=0;
int n;
bool check()
{
  //判断行
  for(int i=0;i<n;i++)
  {
    int cnt0=0,cnt1=0;//记录连续出现
    int sum0=0,sum1=0;
    for(int j=0;j<n;j++)
    {
      if(a[i][j]=='_')cnt1=0,cnt0=0;//连续中断
      else if(a[i][j]=='1'){
        cnt1++;
        sum1++;
        cnt0=0;
      }else if(a[i][j]=='0'){
        cnt0++;
        sum0++;
        cnt1=0;
      }
      if(cnt1>2||cnt0>2)return 0;
      if(sum1>n/2||sum0>n/2) return false;//超过一半就无法保证数量相等
    }
  }
   //判断列
  for(int i=0;i<n;i++)
  {
    int cnt0=0,cnt1=0;//记录连续出现
    int sum0=0,sum1=0;
    for(int j=0;j<n;j++)
    {
      if(a[j][i]=='_')cnt1=0,cnt0=0;//连续中断
      else if(a[j][i]=='1'){
        cnt1++;
        sum1++;
        cnt0=0;
      }else if(a[j][i]=='0'){
        cnt0++;
        sum0++;
        cnt1=0;
      }
      if(cnt1>2||cnt0>2)return 0;
      if(sum1>n/2||sum0>n/2) return false;//超过一半就无法保证数量相等
    }
  }
  return 1;
}
void dfs(int x,int y)//默认是先向右走再向下走
{
  if(flag)return;
  if(y==n)
  {
    x++;//再向下
    y=0;//再从左边起始开始
  }
  if(x==n)
  {
    //到达右下角了可以输出答案
    flag=1;
    for(int i=0;i<n;i++)
    {
      for(int j=0;j<n;j++)
      {
        cout<<a[i][j];
      }
      cout<<endl;
    }
    return;
  }
  if(a[x][y]=='_')
  {
    a[x][y]='1';
    if(check())dfs(x,y+1);//合法才继续往下搜
    if(flag)return;
    a[x][y]='0';
    if(check())dfs(x,y+1);//合法才继续往下搜
    if(flag)return;
    a[x][y]='_';//复原
  }else dfs(x,y+1);
}
int main()
{
  cin>>n;
  for(int i=0;i<n;i++)
  {
    for(int j=0;j<n;j++)
    {
      cin>>a[i][j];
    }
  }
  dfs(0,0);
  return 0;
}

3.子2023(动态规划)

#include <iostream>
#include <string>
using namespace std;
long long dp[4];//注意开longlong!!
//dp[0]:以2结尾的序列数量
//dp[1]:以20结尾的序列数量
//dp[2]:以202结尾的序列数量
//dp[3]:以2023结尾的序列数量
int main()
{
  string s;
  for(int i=1;i<=2023;i++)
  {
    string str=to_string(i);
    s+=str;
  }
  for(int i=0;i<s.size();i++)
  {
    if(s[i]=='2')
    {
      dp[0]++;
      dp[2]=dp[2]+dp[1];
    }else if(s[i]=='0')
    {
      dp[1]=dp[1]+dp[0];
    }else if(s[i]=='3')
    {
      dp[3]=dp[3]+dp[2];
    }
  }
  cout<<dp[3];
  return 0;
}

4.双子数(质因数分解,线性筛)

#include <iostream>
#include <cmath>
using namespace std;
#define ll long long
const ll N=1e7+9;//N*N>23333333333333(2.3*10^13)
ll prime[N];
ll ans;
bool st[N];
//线性筛O(n)
ll getPrime()
{
  ll cnt=0;
  for(ll i=2;i<=N;i++)
  {
    if(!st[i])prime[cnt++]=i;
    for(ll j=0;prime[j]*i<=N;j++)
    {
      st[prime[j]*i]=1;
      if(i%prime[j]==0)break;
    }
  }
  return cnt;
}
int main()
{
  ll idx=getPrime();//预处理得到素数
  for(ll i=0;i<idx;i++)//遍历所有素数
  {
    ll p2=prime[i]*prime[i];//p^2
    if(p2*p2>23333333333333)break;
    for(ll j=i+1;j<idx;j++)
    {
      ll q2=prime[j]*prime[j];//q^2
      if(p2*q2>23333333333333)break;
      if(p2*q2<2333)continue;
      ans++;//在区间内
    }
  }
  cout<<ans<<endl;
  return 0;
}

5.合并数列(双指针)

#include <iostream>
using namespace std;
const int N=1e5+10;
int a[N];
int b[N];
int n,m;
int ans;
int main()
{
  cin>>n>>m;
  for(int i=1;i<=n;i++)cin>>a[i];
  for(int i=1;i<=m;i++)cin>>b[i];
  int i=0,j=0;//从0开始
  //采用前缀和的思想
  int cnta=0,cntb=0;
  while(i<=n&&j<=m)
  {
    if(cnta==cntb)//注意相等是等号!
    {
      cnta=a[++i];
      cntb=b[++j];
    }
    else if(cnta<cntb)
    {
      cnta+=a[++i];
      ans++;
    }
    else if(cntb<cnta)
    {
      cntb+=b[++j];
      ans++;
    }
  }
  cout<<ans<<endl;
  return 0;
}

6.数三角形(枚举,STL)

#include <iostream>
#include <vector>
#include <map>
#include <cmath>
using namespace std;
#define ll long long
#define pii pair<int,int>
int main()
{
  int n;
  cin>>n;
  vector<pii>a(n+2);
  map<pii,int>m;//表示坐标(x,y)点一共出现了几次
  for(int i=1;i<=n;i++)
  {
    cin>>a[i].first>>a[i].second;
    m[{a[i].first,a[i].second}]++;
  }
  int ans=0;
  for(int i=1;i<=n;i++)//枚举每个点作为顶点
  {
    map<ll,vector<int>>st;//距离到达为ll时有多少个点
    for(int j=1;j<=n;j++)
    {
      ll dist=(a[i].first-a[j].first)*(a[i].first-a[j].first)+
      (a[i].second-a[j].second)*(a[i].second-a[j].second);
      if(dist!=0)st[dist].push_back(j);//已经保证了i!=j
    }
    //计算合法数量
    for(auto &x:st)//st为map类型
    {
      vector<int>&v=x.second;
      int cnt=v.size();
      ans+=cnt*(cnt-1)/2;//两两组合可以作为答案
      //保证三点不共线
      int del=0;//不合法的点的数量
      for(int j=0;j<v.size();j++)
      {
        int x1=a[i].first,y1=a[i].second;
        int x2=a[v[j]].first,y2=a[v[j]].second;
        int x3=2*x1-x2,y3=2*y1-y2;//三点共线,都在一个圆内
        //x1=(x3+x2)/2,y1=(y3+y2)/2
        del+=m[{x3,y3}];
      }
      ans-=(del/2);//三点共线 两点的情况多计算了一次
    }
  }
  cout<<ans<<endl;
  return 0;
}

7.AB路线(BFS)

#include <iostream>
#include <queue>
using namespace std;
#define ll long long
const int N=1000+500;
char a[N][N];
int n,m,k;
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
ll vis[N][N][11],dis[N][N][11];
//因为一个位置可以重复走多次,
//再加一维(到这个位置是第几个字母)
struct node
{
  int x,y,cnt;
  //cnt为当前为第cnt个相同字母
  node(int x=0,int y=0,int cnt=0):x(x),y(y),cnt(cnt){}
};
queue<node>q;//用于bfs
int main()
{
  cin>>n>>m>>k;
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=m;j++)
    {
      cin>>a[i][j];
    }
  }
  q.push(node(1,1,1));//cnt=1,为第一个相同字母
  vis[1][1][1]=1;
  if(n==1&&m==1)//特判
  {
    cout<<0<<endl;
    return 0;
  } 
  //开始BFS
  while(!q.empty())
  {
    node t=q.front();
    q.pop();
    for(int i=0;i<4;i++)
    {
      int xx=t.x+dx[i];
      int yy=t.y+dy[i];
      int cc=t.cnt+1;
      if(xx<1||xx>n||yy<1||yy>m)continue;
      if(cc>k)//需要变
      {
        if(a[t.x][t.y]==a[xx][yy])continue;
        else cc=1;
      }
      else //不需要变
      {
        if(a[t.x][t.y]!=a[xx][yy])continue;
      }
      if(vis[xx][yy][cc]!=0)continue;
      vis[xx][yy][cc]++;
      dis[xx][yy][cc]=dis[t.x][t.y][t.cnt]+1;
      if(xx==n&&yy==m)//BFS先找到的一定是最小的,直接输出
      {
        cout<<dis[xx][yy][cc]<<endl;
        return 0;
      }
      q.push(node{xx,yy,cc});
    }
  }
  return 0;
}

8.跑步计划(日期问题)

#include <iostream>
#include <string>
using namespace std;
int main()
{
  int ans=0;
  int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  if((2023%400==0)||(2023%4==0&&2023%100!=0))a[2]++;
  int days=0;
  for(int i=1;i<=12;i++)
  {
    for(int j=1;j<=a[i];j++)
    {
      days++;
      string s1=to_string(i);
      string s2=to_string(j);   //2023年1月1日是周日
      if(s1.find('1')!=-1||s2.find('1')!=-1||days%7==2)ans+=5;
      else ans++;
    }
  }
  cout<<ans<<endl;
  return 0;
}

9.火车运输(动态规划背包问题)

#include <iostream>
using namespace std;
const int N=1000+10;
int dp[N][N];
int w[N];
int n,a,b;
int main()
{
  cin>>n>>a>>b;
  for(int i=1;i<=n;i++)cin>>w[i];
  // 三种情况:不选,放A,放B
  for(int i=1;i<=n;i++)
  {
    for(int j=a;j>=0;j--)
    {
      for(int k=b;k>=0;k--)
      {
       if(j-w[i]>=0)dp[j][k]=max(dp[j][k],dp[j-w[i]][k]+w[i]);
       if(k-w[i]>=0)dp[j][k]=max(dp[j][k],dp[j][k-w[i]]+w[i]); 
      }
    }
  }
  cout<<dp[a][b]<<endl;
  return 0;
}

10.走方格(动态规划图论)

#include <iostream>
using namespace std;
const int N=1000+100;
int a[N][N];
int dp[N][N];
int n;
int main()
{
  cin>>n;
  for(int i=0;i<n;i++)
  {
    for(int j=0;j<n;j++)
    {
      cin>>a[i][j];
    }
  }
  for(int i=0;i<n;i++)
  {
    dp[i][0]=i;//表示走到此步需要的时间
    //因为连续的跳步只发生在水平方向
  }
  for(int i=0;i<n;i++)
  {
    for(int j=1;j<n;j++)
    {
      dp[i][j]=1e9;//初始为大值
      // 从上面下来
      if(i>0)dp[i][j]=min(dp[i][j],dp[i-1][j]+1);
      // 向左到达最远的地方(即最小的地方)
      // 因为是从上到下,从左到右枚举,所以是向左(因为左边已是更新好的值)
      int temp=j;//临时变量
      while(a[i][temp]<a[i][temp-1]&&temp>=1)//严格小于
      {
        dp[i][j]=min(dp[i][j],dp[i][temp-1]+1);
        temp--;
      }
      //从左边一个过来
      dp[i][j]=min(dp[i][j],dp[i][j-1]+1);
    }
  }
  cout<<dp[n-1][n-1]<<endl;
  return 0;
}

11.选段排序(堆,贪心)

#include<iostream>
#include<queue>
#include<vector>
#include<algorithm> 
using namespace std;
const int N=2e5+10;
int a[N];
priority_queue<int,vector<int>>q1;//大顶堆
priority_queue<int,vector<int>,greater<int>>q2;//小顶堆 
int main()
{
	int n,p,q;
	cin>>n>>p>>q;
	for(int i=1;i<=n;i++)cin>>a[i];
	sort(a+p,a+1+q);//注意sort的区间!!
  for(int i=p;i<=q;i++)
	{
	  //区间[p,q]先放入 
	  q1.push(a[i]);//大 
	  q2.push(a[i]);//小 
	} 
	int ans=a[q]-a[p];//先得到初始的答案 
    //拓展右区间由[p,q]到[p,n]
    int maxx=a[q];
    int minn=a[p];
	for(int i=q+1;i<=n;i++)
	{
	  int t=q1.top();//先取堆顶 
	  if(a[i]<minn)minn=a[i];//小的肯定可以排序到p 
	  if(a[i]<t)//t是拓展时用的 
	  {
	    q1.pop();//保证队列元素在[p,q]中
	    q1.push(a[i]);
	    ans=max(ans,q1.top()-minn);
	  }	
	} 
	//拓展左区间由[p,q]到[1,q],向左减法 
	for(int i=p-1;i>=1;i--)
	{
	  int t=q2.top();//先取堆顶 
	  if(a[i]>maxx)maxx=a[i];//大的肯定可以排序到q
	  if(a[i]>t)
	  {
		q2.pop();//保证队列元素在[p,q]中 
		q2.push(a[i]);
		ans=max(ans,maxx-q2.top());	
	  } 
	} 
	cout<<ans<<endl;
	return 0;
}

12.混乘数字(数学,枚举)

#include <iostream>
#include <string>
#include <map>
#include <set>
using namespace std;
#define ll long long
set<ll>ans;//自动去重
bool check(ll n,ll a,ll b)
{
  int num[10]={0};
  string sn=to_string(n);
  string sa=to_string(a);
  string sb=to_string(b);
  for(int i=0;i<sn.size();i++)
  {
    num[sn[i]-'0']++;
  }
  for(int i=0;i<sa.size();i++)
  {
    num[sa[i]-'0']--;
  }
  for(int i=0;i<sb.size();i++)
  {
    num[sb[i]-'0']--;
  }
  for(int i=0;i<=9;i++)
  {
    if(num[i])return false;//通过相减
  }
  return true;
}
int main()
{
  for(ll i=1;i<=1000000;i++)
  {
    ll kk=i*i;
    if(kk>1000000)break;
    if(check(kk,i,i))ans.insert(kk);
    for(ll j=i+1;j<=1000000;j++)
    {
      kk=i*j;
      if(kk>1000000)break;
      if(check(kk,i,j))ans.insert(kk);
    }
  }
  cout<<ans.size()<<endl;
  return 0;
}

13.X质数(线性筛,二进制)

#include <iostream>
#include <string>
using namespace std;
const int N=1e6;
int idx=0;
int prime[N];
int st[N];
int ans=0;
void get()
{
  st[0]=st[1]=1;
  for(int i=2;i<=N;i++)
  {
    if(!st[i])prime[++idx]=i;
    for(int j=1;j<=idx&&i*prime[j]<=N;j++)//从1开始
    {
      st[i*prime[j]]=1;
      if(i%prime[j]==0)break;
    }
  }
}
bool check(int x) {
    string num = to_string(x);
    int n = num.size();// n个数字,每个数字算不算进去两种选择
    for (int i = 0; i < (1 << n); ++i) { //n位数,有2^n种情况
        int cur = 0;
        for (int j = 0; j < n; ++j) { // 每种情况为一个二进制值
            if ((i >> j) & 1) cur = cur * 10 + num[j] - '0';
        }
        if (!st[cur]) return true;
    }
    return false;
}
int main()
{
  get();
  for(int i=1;i<=N;i++)
  {
    if(check(i))ans++;
  }
  cout<<ans<<endl;
  return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

运维开发.Kubernetes探针与应用

运维系列 Kubernetes探针与应用 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263…

HTML静态网页成品作业(HTML+CSS)——企业装饰公司介绍网页(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有4个页面。 二、作品演示 三、代…

【C++】C++11新特性:列表初始化、声明、新容器、右值引用、万能引用和完美转发

目录 一、列表初始化 1.1 { } 初始化 1.2 std::initializer_list 二、声明 2.1 auto 2.2 decltype 2.3 nullptr 三、新容器 四、右值引用和移动语义 4.1 左值和左值引用 4.2 右值和右值引用 4.3 左值引用与右值引用比较 4.4 右值引用使用场景和意义&#xff1a;移…

chap5 CNN

卷积神经网络&#xff08;CNN&#xff09; 问题描述&#xff1a; 利用卷积神经网络&#xff0c;实现对MNIST数据集的分类问题 数据集&#xff1a; MNIST数据集包括60000张训练图片和10000张测试图片。图片样本的数量已经足够训练一个很复杂的模型&#xff08;例如 CNN的深层…

Visual Studio Code使用(C++项目新建,运行)

VS Code 直接在官网下载安装。 接下来安装插件&#xff0c;下图是C所需的对应插件 1.新建项目 VS Code下载安装完成后&#xff0c;直接进入欢迎页&#xff1a; 在访达/文件夹中新建一个文件夹&#xff0c;欢迎页点击【打开】&#xff0c;选择刚刚新建的文件夹。点击第一个图…

MT8781安卓核心板_MTK联发科Helio G99核心板规格参数

MT8781安卓核心板采用先进的台积电6纳米级芯片生产工艺&#xff0c;配备高性能Arm Cortex-A76处理器和Arm Mali G57 GPU&#xff0c;加上LPDDR4X内存和UFS 2.2存储&#xff0c;在处理速度和数据访问速度上都有着出色的表现。 MT8781还支持120Hz显示器&#xff0c;无需额外的DSC…

vue3学习(六)

前言 接上一篇学习笔记&#xff0c;今天主要是抽空学习了vue的状态管理&#xff0c;这里学习的是vuex&#xff0c;版本4.1。学习还没有学习完&#xff0c;里面有大坑&#xff0c;难怪现在官网出的状态管理用Pinia。 一、vuex状态管理知识点 上面的方式没有写全&#xff0c;还有…

QT软件界面的设计与启动方法

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、Q T界面设计的重要性 二、QT软件的启动与配置 三、QT软件的启动路径设置 四、QT软件启…

Linux--EXT2文件系统

参考资料&#xff1a; linux之EXT2文件系统--理解block/block group/索引结点inode/索引位图_一个块组中索引节点表和数据块区最多占用字节-CSDN博客 linux环境&#xff1a; Linux version 5.15.146.1-microsoft-standard-WSL2 (root65c757a075e2) (gcc (GCC) 11.2.0, GNU ld…

Llama改进之——分组查询注意力

引言 今天介绍LLAMA2模型引入的关于注意力的改进——分组查询注意力(Grouped-query attention,GQA)1。 Transformer中的多头注意力在解码阶段来说是一个性能瓶颈。多查询注意力2通过共享单个key和value头&#xff0c;同时不减少query头来提升性能。多查询注意力可能导致质量下…

C++双层Vector容器详解

双层Vector容器 关于C中二维vector使用 双层vector的运用细节 插入元素 //正确的插入方式 vector<vector<int> > A; //A.push_back里必须是vector vector<int> B; B.push_back(0); B.push_back(1); B.push_back(2); A.push_back(B); B.clear(); B.push_back…

AI边缘计算盒子在智慧交通的应用

方案背景 随着经济增长&#xff0c;交通出行需求大幅增长&#xff0c;但道路建设增长缓慢&#xff0c;交通供需矛盾日益显著&#xff0c;中心城区主要道路高峰时段交通拥堵严重&#xff0c;道路交通拥堵逐渐常态化&#xff0c;成为制约城市可持续发展的重要因素之一。 痛点问题…

python移位操作符(左移位操作符<<、右移位操作符>>)(允许开发者对整数进行位操作,乘2或除2)(左移操作、右移操作)(位掩码操作|=)

文章目录 Python 中的移位操作符详解移位操作符简介左移位操作符 (<<)语法和使用示例代码输出 右移位操作符 (>>)语法和使用示例代码输出 移位操作符的应用场景快速乘除运算&#xff1a;使用移位操作符代替传统的乘法和除法运算&#xff0c;可以提高计算速度。位掩…

3位新加坡华人交易员分享:交易策略、风险管理与心态

交易与投资似乎是一对“双胞胎”,它们都是金融市场中获得收益的重要途径。 区别在于投资者购买自以为长期将有出色业绩的资产组合&#xff0c;并且长期持有这些资产组合&#xff0c;交易者依靠交易技巧借助资产工具价格瞬息波动在短期内产生利润。交易资产的手段有&#xff0c…

MySQL统计字符长度:CHAR_LENGTH(str)

对于SQL表&#xff0c;用于计算字符串中字符数的最佳函数是 CHAR_LENGTH(str)&#xff0c;它返回字符串 str 的长度。 另一个常用的函数 LENGTH(str) 在这个问题中也适用&#xff0c;因为列 content 只包含英文字符&#xff0c;没有特殊字符。否则&#xff0c;LENGTH() 可能会返…

unicloud 云对象

背景和优势 20年前&#xff0c;restful接口开发开始流行&#xff0c;服务器编写接口&#xff0c;客户端调用接口&#xff0c;传输json。 现在&#xff0c;替代restful的新模式来了。 云对象&#xff0c;服务器编写API&#xff0c;客户端调用API&#xff0c;不再开发传输json…

AI图书推荐:使用GitHub Copilot和ChatGPT辅助的Python编程

使用Python编写计算机程序变得更加简单了&#xff01;使用像GitHub Copilot和ChatGPT这样的AI辅助编码工具&#xff0c;将你的想法快速转化为应用程序。人工智能已经改变了我们编写计算机程序的方式。有了像Copilot和ChatGPT这样的工具&#xff0c;你可以用简单的英语描述你想要…

QT5:调用qt键盘组件实现文本框输入

目录 一、环境与目标 二、Qt VirtualKeyboard 1.勾选Qt VirtualKeyboard 2.ui设计流程 3.注意事项及问题点 三、参考代码 参考博客 一、环境与目标 qt版本&#xff1a;5.12.7 windows 11 下的 Qt Designer &#xff08;已搭建&#xff09; 目标&#xff1a;创建一个窗…

【Nacos源码分析01-服务注册与集群间数据是同步】

文章目录 了解CAPBASE理论Nacos支持CP还是AP集群数据同步实现集群数据一致性源码 了解CAP CAP理论的核心观点是&#xff0c;一个分布式系统无法同时完全满足一致性、可用性和分区容错性这三个特性。具体而言&#xff0c;当发生网络分区时&#xff0c;系统必须在一致性和可用性之…

【Vue】v-for中的key

文章目录 一、引入问题二、分析问题 一、引入问题 语法&#xff1a; key属性 "唯一值" 作用&#xff1a;给列表项添加的唯一标识。便于Vue进行列表项的正确排序复用。 为什么加key&#xff1a;Vue 的默认行为会尝试原地修改元素&#xff08;就地复用&#xff09;…