蓝桥杯备战刷题four(自用)

news2024/11/15 18:37:08

1.砝码称重

#include <iostream>
#include <vector>
using namespace std;
const int N=110;
const int M=100010;
int w[N];
int n;
int f[N][M];
int m;
int ans;
//f[i][j]表示到第i个砝码进行放置时的称得的重量为j的方案数
int main()
{
  cin>>n;
  for(int i=1;i<=n;i++)
  {
    cin>>w[i];
    m+=w[i];
  }
  f[0][0]=1;
  for(int i=1;i<=n;i++)
  {
    for(int j=0;j<=m;j++)
    {
      f[i][j]=f[i-1][j]+f[i-1][j+w[i]]+f[i-1][abs(j-w[i])];
    }
  }
  for(int j=1;j<=m;j++)
  {
    if(f[n][j])//有方案
    {
      ans++;
    }
  }
  cout<<ans<<endl;
  return 0;
}

2.直线

#include <iostream>
#include <map>
using namespace std;
struct node
{
  double x,y;//使用double为了计算斜率和截距方便
}p[20*21+5];
map<pair<double,double>,int>mp;//判断是否已经有此直线了
int cnt;
int ans;
int main()
{
  //20*21个整点即20行x19列
  int row=21;//纵坐标0~20
  int col=20;//横坐标0~19
  for(int i=0;i<col;i++)
  {
    for(int j=0;j<row;j++)
    {
     p[cnt].x=i;
     p[cnt].y=j;
     cnt++; 
    }
  }
  ans=row+col;//初始为所有横线+竖线
  for(int i=0;i<cnt;i++)//枚举所有两两点
  {
    for(int j=0;j<cnt;j++)
    {
      if(p[i].x==p[j].x||p[i].y==p[j].y)continue;//同一横和竖都不要
      double k=(p[i].y-p[j].y)/(p[i].x-p[j].x);
      double b=(p[i].x*p[j].y-p[j].x*p[i].y)/(p[i].x-p[j].x);
      if(mp[{k,b}]==0)
      {
        mp[{k,b}]=1;
        ans++;
      }
    }
  } 
  cout<<ans<<endl;
  return 0;
}

3.异或数列

#include <iostream>
#include <vector>
using namespace std;
int main()
{
  int t;
  cin>>t;
  while(t--)
  {
    int n;
    cin>>n;
    int res=0;
    vector<int>v(32);
    for(int i=0;i<n;i++)
    {
      int k;
      cin>>k;
      res^=k;
      for(int j=0;j<32&&k;j++)
      {
        if(k&1)
        {
          v[j]++;
        }
        k>>=1;
      }
    }
    if(res==0)
    {
      cout<<0<<endl;
      continue;
    }
   for(int j=31;j>=0;j--)
   {
     if(v[j]%2==0)continue;
     else
     {
       if(v[j]==1)
       {
         cout<<1<<endl;
         break;
       }
       else
       {
         if(n%2==0)
         {
           cout<<-1<<endl;
           break;
         }
         else
         {
           cout<<1<<endl;
           break;
         }
       }
     }
   }
  }
  return 0;
}

4.左孩子右兄弟

#include <iostream>
#include <vector>
using namespace std;
const int N=1e5+10;
vector<int>e[N];
int n;
int dfs(int x)
{
  int res=0;//子树的最大高度
  for(int i=0;i<e[x].size();i++)
  {
    int v=e[x][i];
    res=max(res,dfs(v));
  }
  return res+e[x].size();
}
int main()
{
  cin>>n;
  for(int i=2;i<=n;i++)
  {
    int fa;
    cin>>fa;
    //fa->i
    e[fa].push_back(i);
  }
  cout<<dfs(1)<<endl;
  return 0;
}

5.时间显示

#include <iostream>
using namespace std;
#define ll long long
int main()
{
  ll n;
  cin>>n;
  n/=1000;
  ll h=n/3600;
  n%=3600;
  ll m=n/60;
  n%=60;
  ll s=n;
  h%=24;
  if(h<10)cout<<"0";
  cout<<h<<":";
  if(m<10)cout<<"0";
  cout<<m<<":";
  if(s<10)cout<<"0";
  cout<<s<<endl;
  return 0;
}

6.通电

#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
const int N=1000000+10;//1e6!!
struct edge
{
  int u,v;
  double d;
  bool operator < (const edge &e)const{
    return d<e.d;
  }
};
struct point
{
  int x,y,h;
};
int n;
edge e[2*N+10];
point p[N];
int fa[N];
int find(int x)
{
  if(x!=fa[x])fa[x]=find(fa[x]);
  return fa[x];
}
void Kruscal(int m)
{
  double sum=0;
  for(int i=0;i<n;i++)
  {
    fa[i]=i;
  }
  for(int i=0;i<m;i++)
  {
    int u=e[i].u;
    int v=e[i].v;
    double d=e[i].d;
    int pu=find(u);
    int pv=find(v);
    if(pu!=pv)
    {
      fa[pu]=pv;
      sum+=d;
    }
  }
  printf("%.2lf\n",sum);
}
int main()
{
  cin>>n;
  for(int i=0;i<n;i++)
  {
    int x,y,h;
    cin>>x>>y>>h;
    p[i]={x,y,h};
  }
  int idx=0;
  for(int i=0;i<n;i++)
  {
    for(int j=i+1;j<n;j++)
    {
      e[idx].u=i;
      e[idx].v=j;
      e[idx].d=sqrt(1.0*(p[i].x-p[j].x)*(p[i].x-p[j].x)+1.0*(p[i].y-p[j].y)*(p[i].y-p[j].y))+(p[i].h-p[j].h)*(p[i].h-p[j].h);
      idx++;
    }
  }
  sort(e,e+idx);
  Kruscal(idx);
  return 0;
}

7.数位递增的数

#include <iostream>
using namespace std;
bool check(int x)
{
  int d=x%10;
  x/=10;
  while(x!=0)
  {
    if(x%10>d)return false;
    d=x%10;
    x/=10;
  }
  return true;
}
int main()
{
  int n;
  cin>>n;
  int ans=0;
  for(int i=1;i<=n;i++)
  {
    if(check(i))ans++;
  }
  cout<<ans<<endl;
  return 0;
}

8.三元组中心问题

#include <iostream>
#include <map>
using namespace std;
const int N=1e6+10;
int a[N];
int ans=0;
map<int,int>mp;
int main()
{
  //严格递增数列长度为3
  int n;
  cin>>n;
  for(int i=0;i<n;i++)
  {
    cin>>a[i];
  }
  for(int i=0;i<n;i++)
  {
    for(int j=i+1;j<n;j++)
    {
      for(int k=j+1;k<n;k++)
      {
        if(a[i]<a[j]&&a[j]<a[k])
        {
          if(!mp[j])
          {
            mp[j]=1;
            ans++;
            break;
          }
        }
      }
    }
  }
  cout<<ans<<endl;
  return 0;
}

9.音节判断

#include <iostream>
#include <map>
using namespace std;
map<char,int>mp;
int main()
{
  for(char i='a';i<='z';i++)
  {
    if(i=='a'||i=='e'||i=='i'||i=='o'||i=='u')
    {
      mp[i]=1;
    }
  }
  string s;
  cin>>s;
  string pd;
  //fu yuan fu yuan 0辅1元
  for(int i=0;i<s.size();i++)
  {
    if(mp[s[i]])
    {
      pd+="1";
      while(mp[s[i]])
      {
        i++;
      }
      i--;
    }
    else
    {
      pd+="0";
      while(!mp[s[i]])
      {
        i++;
      }
      i--;
    }
  }
  if(pd=="0101")
  {
    cout<<"yes";
  }
  else{
    cout<<"no";
  }
  return 0;
}

10.长草

#include <iostream>
#include <queue>
using namespace std;
#define pii pair<int,int>
#define x first
#define y second
const int N=1000+100;
char g[N][N];
int dx[]={-1,1,0,0};
int dy[]={0,0,1,-1};
int n,m,k;
int ans;
void bfs()
{
  queue<pii>q;
   for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=m;j++)
    {
      if(g[i][j]=='g')
      {
        q.push({i,j});
      }
    }
  }
  while(!q.empty())
  {
    auto t=q.front();
    q.pop();
    for(int i=0;i<4;i++)
    {
      int xx=dx[i]+t.x;
      int yy=dy[i]+t.y;
      if(xx<1||xx>n||yy<1||yy>m||g[xx][yy]=='g')continue;
      g[xx][yy]='g';
    }
  }
}
int main()
{
  cin>>n>>m;
  int stx=0;
  int sty=0;
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=m;j++)
    {
      cin>>g[i][j];
      if(g[i][j]=='g')
      {
        stx=i;
        sty=j;
      }
    }
  }
  cin>>k;
  while(k--)
  bfs();
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=m;j++)
    {
      cout<<g[i][j];
    }
    cout<<endl;
  }
  return 0;
}

11.积木

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N=1000+5;
int n,m;
int a[N][N];
int H;
vector<int>seq;
long long sum;
int main()
{
  cin>>n>>m;
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=m;j++)
    {
      cin>>a[i][j];
      if(a[i][j]>=1)
      {
        seq.push_back(a[i][j]);
      }
    }
  }
  cin>>H;
  sort(seq.rbegin(),seq.rend());
  for(int h=1;h<=H;h++)
  {
    if(seq.back()>=h)
    {
      sum+=seq.size();
    }
    while(seq.back()<=h)
    {
      if(seq.size()==1)break;
      seq.erase(seq.end()-1);
    }
    cout<<sum<<endl;
  }
  return 0;
}

12.植树(DFS难)

#include <iostream>
#include <cmath>
using namespace std;
const int N=10000+100;
struct tree
{
  int x,y,r,s;
};
int n;
tree v[N];
int vis[N];//有无加入答案
bool cross[N][N];
int ans;
double dis(int x,int y)
{
  return sqrt(x*x+y*y);
}
void dfs(int cnt,int area)
{
  if(cnt>=n)
  {
    ans=max(ans,area);
    return;
  }
  for(int i=0;i<cnt;i++)//看看前面放进去的会不会和当前这棵树相交
  {
    if(vis[i]&&cross[i][cnt])
    {
      dfs(cnt+1,area);//有相交就不要
      return;
    }
  } 
  //要和不要都要进行
  vis[cnt]=1;
  dfs(cnt+1,area+v[cnt].s);
  vis[cnt]=0;
  dfs(cnt+1,area);
  return;
}
int main()
{
  cin>>n;
  for(int i=0;i<n;i++)
  {
    int x,y,r;
    cin>>x>>y>>r;
    v[i]={x,y,r,r*r};
  }
  for(int i=0;i<n;i++)
  {
    for(int j=i+1;j<n;j++)
    {
      double d=dis(v[i].x-v[j].x,v[i].y-v[j].y);
      if(d<1.0*(v[i].r+v[j].r))cross[i][j]=cross[j][i]=1;
      else cross[i][j]=cross[j][i]=0;
    }
  }
  dfs(0,0);
  cout<<ans<<endl;
 return 0;
}

13.子串分值

#include <iostream>
#include <map>
using namespace std;
#define ll long long
const int N=1e5+5;
ll last[N];
ll pre[N];
ll nex[N];
ll sum;
int main()
{
  string s;
  cin>>s;
  int l=s.size();
  for(int i=0;i<26;i++)
  {
    last[i]=-1;//求pre
  }
  for(int i=0;i<l;i++)
  {
    int k=s[i]-'a';
    pre[i]=last[k];//当前下标的字符的上一个相同字符位置赋值
    last[k]=i;//更新当前字符的下标
  }
  for(int i=0;i<26;i++)
  {
    last[i]=l;//求next
  }
  for(int i=l-1;i>=0;i--)
  {
    int k=s[i]-'a';
    nex[i]=last[k];//当前下标的字符的下一个相同字符位置赋值
    last[k]=i;
  }
  for(int i=0;i<l;i++)
  {
    sum+=(i-pre[i])*(nex[i]-i);
  }
  cout<<sum<<endl;
  return 0;
}

14.平面切分

//第一条直接增加的平面是2,以后每增加一条线,平面数量就加一(平行情况)
//若有交点,n个交点就加上n个平面

#include <iostream>
#include <set>
using namespace std;
//第一条直接增加的平面是2,以后每增加一条线,平面数量就加一(平行情况)
//若有交点,n个交点就加上n个平面
const int N=1000+10;
#define x first
#define y second
long double s[N][2];//存斜率和截距
long long ans;
bool st[N];//判重边
pair<long double,long double>p;//点的横坐标和纵坐标
int n;
int main()
{
  cin>>n;
  for(int i=0;i<n;i++)//枚举每条边
  {
    cin>>s[i][0]>>s[i][1];
    //用set自动去重
    set<pair<long double,long double>>points;
    for(int j=0;j<i;j++)//i这条边与前面的j条边进行比较
    {
      if(st[j])continue;
      if(s[i][0]==s[j][0])
      {
        if(s[i][1]==s[j][1])
        {
          st[i]=1;
          break;
        }
        else continue;
      }
      else
      {
        //y=k1*x+b1 y=k2*x+b2
        //(b2-b1)=(k1-k2)x
        //交点的横坐标
        p.x=(s[j][1]-s[i][1])/(s[i][0]-s[j][0]);
        //交点的纵坐标
        p.y=s[i][0]*p.x+s[i][1];
        points.insert(p);
      }
    }
    if(!st[i])ans+=points.size()+1;//点的数量加上此条边的数量1
  }
  cout<<ans+1;//加上第一条边的多1
  return 0;
}

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

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

相关文章

JVM 第四部分—垃圾回收相关概念 2

System.gc() 在默认情况下&#xff0c;通过System.gc()或者Runtime.getRuntime().gc()的调用&#xff0c;会显式触发Full GC&#xff0c;同时对老年代和新生代进行回收&#xff0c;尝试释放被丢弃对象占用的内存 然而System.gc()调用附带一个免责声明&#xff0c;无法保证对垃…

Springboot+vue的商业辅助决策系统的设计与实现(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的商业辅助决策系统的设计与实现&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的商业辅助决策系统的设计与实现&#xff0c;采…

前端的文字的字体应该如何设置

要设置文字的字体&#xff0c;在CSS中使用font-family属性。这个属性可以接受一个或多个字体名称作为其值&#xff0c;浏览器会按照列表中的顺序尝试使用这些字体渲染文本。如果第一个字体不可用&#xff0c;浏览器会尝试使用列表中的下一个字体&#xff0c;依此类推。 字体设…

6.CVAT——属性注释模式

文章目录 1. 属性注释模式&#xff08;基础&#xff09;2. 属性标注模式&#xff08;高级&#xff09; 1. 属性注释模式&#xff08;基础&#xff09; 属性注释模式下可用的使用示例和基本操作。 在此模式下&#xff0c;您可以使用键盘在对象和框架之间快速导航来编辑属性。打…

【python】`assert`断言语句

assert是一个断言语句&#xff0c;用于在代码中检查某个条件是否为真。 如果条件为假&#xff0c;将触发AssertionError 异常&#xff0c;从而指示存在错误。

Java 网络面试题解析

1. Http 协议的状态码有哪些&#xff1f;含义是什么&#xff1f;【重点】 200&#xff1a;OK&#xff0c;客户端请求成功。 301&#xff1a;Moved Permanently&#xff08;永久移除&#xff09;&#xff0c;请求的URL已移走。Response中应该包含一个Location URL&#xff0c;…

Vue3 条件渲染 v-if

v-if 指令&#xff1a;用于控制元素的显示或隐藏。 执行条件&#xff1a;当条件为 false 时&#xff0c;会将元素从 DOM 中删除。 应用场景&#xff1a;适用于显示隐藏切换频率较低的场景。 语法格式&#xff1a; <div v-if"数据">内容</div> 基础用…

模拟服务器响应的测试框架:moco

第1章&#xff1a;引言 大家好&#xff0c;我是小黑&#xff0c;在这篇博客中&#xff0c;咱们要聊聊Moco测试框架。这个框架&#xff0c;可不是一般的小伙伴&#xff0c;它在模拟服务器响应这块儿&#xff0c;可是有不少看家本领。 首先&#xff0c;Moco是啥呢&#xff1f;简…

彻底搞懂回溯算法(例题详解)

目录 什么是回溯算法&#xff1a; 子集问题&#xff1a; 子集问题II(元素可重复但不可复选): 组合问题&#xff1a; 组合问题II(元素可重复但不可复选): 排列问题&#xff1a; 排列问题II(元素可重复但不可复选): 什么是回溯算法&#xff1a; 「回溯是递归的副产品&…

全球十大正规伦敦金交易平台app软件最新排名(综合版)

伦敦金作为当前国际市场中较为成熟、灵活的投资产品自然备受青睐&#xff0c;但投资者在选择交易软件时&#xff0c;应该尽量选择在行业内排名较高&#xff0c;口碑较好的平台&#xff0c;这样才能获得可靠的投资服务。刚开始不太懂得如何选择伦敦金软件的时候&#xff0c;投资…

SpringBoot原理-配置优先级(黑马学习笔记)

配置优先级 在我们前面的课程当中&#xff0c;我们已经讲解了SpringBoot项目当中支持的三类配置文件&#xff1a; ● application.properties ● application.yml ● application.yaml 在SpringBoot项目当中&#xff0c;我们要想配置一个属性&#xff0c;可以通过这三种方…

手写模拟器,解放双手!效果炸裂的生产工具

手写模拟器是一款基于Handright的仿手写图片生成软件&#xff0c;可以让你的电脑和手机也能写出漂亮的手写字&#xff0c;你只需要输入你想要写的内容&#xff0c;选择你喜欢的字体和背景&#xff0c;就可以生成一张高仿真的手写图片&#xff0c;用于各种场合&#xff0c;比如做…

搜索算法(算法竞赛、蓝桥杯)--双向BFS双向奔赴

1、B站视频链接&#xff1a;B18 双向BFS Nightmare_哔哩哔哩_bilibili 题目链接&#xff1a;Problem - 3085 #include <bits/stdc.h> using namespace std; const int N810; int n,m; #define x first #define y second char g[N][N]; //地图 int vis[N][N]; //2表示女…

3.2日学习打卡----初学FastDFS(二)

3.2日学习打卡 目录: 3.2日学习打卡SpringBoot整合FastDFS实战开发文件上传 FastDFS集成Nginx环境搭建 SpringBoot整合FastDFS 由GitHub大牛tobato在原作者YuQing与yuqih发布的JAVA客户端基础上进行了大量重构工作&#xff0c;并于GitHub上发布了FastDFS-Client1.26.5。 主要特…

Java字符串相关类的底层原理

Java字符串相关类的底层原理

MySQL(2/3)

select和别名的使用 主要是用以查询数据 语法&#xff1a;select 字段 from 库名 -- *代表全部字段 select * from student; -- 可以查询多个字段&#xff0c;并使用as起别名&#xff0c;as可以省略 select id as bbb ,name as hhh from student; -- 可以使用函数concat(a,b…

Matlab|【免费】基于合作博弈的综合能源系统利益分配优化调度

目录 主要内容 部分代码 结果一览 下载链接 主要内容 该程序实现的模型为综合能源系统利益分配优化调度&#xff0c;采用合作博弈方法&#xff0c;模型针对IES系统的P2G、电解槽、甲烷反应器、储氢罐、CHP和燃气锅炉等设备进行建模&#xff0c;实现基于合作博弈的…

Stable Cascade-ComfyUI中文生图、图生图、多图融合基础工作流分享

最近 ComfyUI对于Stable Cascade的支持越来越好了一些&#xff0c;官方也放出来一些工作流供参考。 这里简单分享几个比较常用的基础工作流。 &#xff08;如果还没有下载模型&#xff0c;可以先阅读上一篇Stable Cascade升级&#xff0c;现在只需要两个模型&#xff09; &a…

把Anaconda添加进环境变量的方法(解决pip识别不到环境的问题)

找到你的Anaconda的安装根目录 比如我的是在&#xff1a;C:\ProgramData\Anaconda3 那么只需要将以下目录添加进环境变量即可&#xff1a; C:\ProgramData\Anaconda3C:\ProgramData\Anaconda3\ScriptsC:\ProgramData\Anaconda3\Library\binC:\ProgramData\Anaconda3\condabin…

volatile 关键字 (一)

volatile 关键字 &#xff08;一&#xff09; 文章目录 volatile 关键字 &#xff08;一&#xff09;如何保证变量的可见性&#xff1f;如何禁止指令重排序&#xff1f; 文章来自Java Guide 用于学习如有侵权&#xff0c;立即删除 如何保证变量的可见性&#xff1f; 在 Java 中…