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

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.mfbz.cn/a/423555.html

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

相关文章

【解决(几乎)任何机器学习问题】:交叉验证

在上⼀章中&#xff0c;我们没有建⽴任何模型。原因很简单&#xff0c;在创建任何⼀种机器学习模型之前&#xff0c;我们必须知道什么是交叉检验&#xff0c;以及如何根据数据集选择最佳交叉检验数据集。 那么&#xff0c;什么是 交叉检验 &#xff0c;我们为什么要关注它&…

HelixToolKit的模型旋转操作

前面加载了模型以后&#xff0c;鼠标拖动和缩放比较好操作&#xff1b;但是旋转似乎没有&#xff0c; 操作了一阵&#xff0c;也不是没有&#xff0c;应该是还不熟悉&#xff1b; 旋转的指示器在右下角&#xff0c;现在U面看到正面&#xff0c; 想看一下模型的背面&#xff0…

2024年最免费的DAW混音编曲FL Studio21.2.3.4004中文破解版下载

FLStudio21.2.3.4044中文破解版完整下载是最好的音乐开发和制作软件也称为水果循环。它是最受欢迎的工作室&#xff0c;因为它包含了一个主要的听觉工作场所。最新fl studio破解版有不同的功能&#xff0c;如它包含图形和音乐音序器&#xff0c;帮助您使完美的配乐在一个美妙的…

powershell常用命令分类

powershell常用命令分为三类&#xff1a;get类、set类、write类。 一 Get类 1.Get-Command &#xff1a; 得到所有PowerShell命令&#xff0c;获取有关 cmdlet 以及有关 Windows PowerShell 命令的其他元素的基本信息。包括Cmdlet、Alias、Function。 2.Get-Process &#xf…

【Java实战项目】SpringBoot + Vue3打造你的在线电子书平台!

今天给大家分享一个基础的Java实战项目&#xff0c;用SpringBoot和Vue3开发一个电子书平台&#xff0c;大家可以尝试做一下这个项目&#xff0c;以此来检验这段时间的学习成果&#xff01;废话不多说&#xff0c;下面正式进入项目&#xff1a; 一、项目介绍 1. 项目简介 在线…

mysql数据库学习笔记2——linux系统下安装,对库,表的基本操作语句

关于在linux系统下安装可以查看linux 安装mysql服务&#xff08;超详细&#xff09;_cannot write to-CSDN博客相关教程 对库的一些操作有 show databases查看有哪些数据库&#xff0c;create database “新建数据库名称” 创建新的数据库&#xff0c;use “数据库名称”切换…

H12-821_106

106.如图所示&#xff0c;RTA的GEO/0/0、GEO/0/1接口分别连接部门1和2&#xff0c;其网段分别为10.1.2.0/24、10.1.3.0/24网段&#xff0c;为限制部门1和2之间的相互访间&#xff0c;在RTA上部署traffic-filter&#xff0c;以下哪些部署方式是正确&#xff1f; A.配置ACL3000拒…

基于NSFW数据集的违规图片检测系统

目录 一、功能介绍 二、安装部署说明 2.1数据集简介 2.2文件目录说明 一、功能介绍 本程序是一个违规图片检测系统&#xff0c;能够识别用户上传的信息图片&#xff0c;是否包含有敏感&#xff08;NSFW&#xff0c;Not Safe For Work&#xff09;信息。 本程序使用雅虎开源的NS…

pikachu验证XXE漏洞

先随便输入一个内容查看 服务器有回显 接下来用bp抓包看下参数 有个xml参数&#xff0c;而且Content-Type: application/x-www-form-urlencoded&#xff0c;我们传入url编码后的xml内容试一下 <?xml version"1.0" encoding"UTF-8"?> <!DOCTYP…

Windows 11 23H2 based Tiny11 2311 中文输入法出错

参考&#xff1a; 1&#xff1a; Chinese IME dictionaries shows "not ready yet" in Windows Server 2022 - Windows Server | Microsoft Learn 2&#xff1a; Chinese basic typing not completing download - Microsoft Community 安装了 Tiny11 2311&#xff…

技巧 文本编辑器 B列每一行数据换行合并到A列中

一. 需求背景 ⏹A列是我们制作的日文版歌词&#xff0c;B列是中文版译文歌词 现在想让B列的每一行歌词&#xff0c;按下图箭头所示插入到A列的每一行后面 二. 通过文本编辑器的替换功能解决 将Excel中的A和B列的数据复制粘贴到文本编辑器中Excel中的列和列之前是通过Tab来分隔…

LeetCode_Java_动态规划系列(2)(题目+思路+代码)

131.分割回文串 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 1&#xff1a; 输入&#xff1a;s "aab" 输出&#xff1a;[["a&qu…

小白学视觉 | 详解遗传算法 GA(Python实现代码)

本文来源公众号“小白学视觉”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;详解遗传算法 GA&#xff08;Python实现代码&#xff09; 转自&#xff1a;机器之心 英文&#xff1a;www.analyticsvidhya.com/blog/2017/07/introduc…

aspose转pdf乱码问题

1 问题描述 在centos服务器使用aspose.word转换word文件为pdf的时候显示中文乱码&#xff0c;但是在win服务器上使用可以正常转换。 2 问题原因 通过查资料分析后确认是由于linux服务器缺少对应的字库导致文件转换出现乱码的。 3 解决方案1:环境解决 安装字库&#xff0c;将…

跨域的出现以及解决

1,跨域的产生 跨域&#xff1a; 指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的&#xff0c;是 浏览器对 javascript 施加的安全限制 。 • 同源策略 &#xff1a;是指协议&#xff0c;域名&#xff0c;端口都要相同&#xff0c;其中有一个不同都会产生…

KubeEdge 边缘计算

文章目录 1.KubeEdge2.KubeEdge 特点3.KubeEdge 组成4.KubeEdge 架构 KubeEdge # KubeEdgehttps://iothub.org.cn/docs/kubeedge/ https://iothub.org.cn/docs/kubeedge/kubeedge-summary/1.KubeEdge KubeEdge 是一个开源的系统&#xff0c;可将本机容器化应用编排和管理扩展…

C++ STL -->模拟实现string

文章目录 string模拟实现模拟实现string类函数接口默认成员函数构造函数析构函数拷贝构造函数赋值运算符重载函数 迭代器相关函数(iterator)begin()end() capacity(容量和大小函数)size函数capacity函数reserve函数resize函数 modfiy(修改字符串函数)push_back(尾插)append(尾插…

怎么在 Ubuntu 22.04 上使用 SSH

目录 How to Enable SSH on Ubuntu 22.04How to connect the computer by using the SSHConclusion SSH 是一种安全外壳网络协议&#xff0c;用于通过互联网在两台计算机之间进行通信&#xff0c;一台称为客户端计算机&#xff0c;另一台称为主机计算机。 openSSH 的包可以使用…

Vue开发实例(七)Axios的安装与使用

说明&#xff1a; 如果只是在前端&#xff0c;axios常常需要结合mockjs使用&#xff0c;如果是前后端分离&#xff0c;就需要调用对应的接口&#xff0c;获取参数&#xff0c;传递参数&#xff1b;由于此文章只涉及前端&#xff0c;所以我们需要结合mockjs使用&#xff1b;由于…

vxe-table编辑单元格动态插槽slot的使用

业务场景&#xff1a;表格中只有特定某一行的的单元格可以编辑&#xff0c;列很多&#xff0c;为每个列写个插槽要写很多重复代码&#xff0c;所以这里使用动态插槽&#xff0c;简化代码量。显示编辑图标&#xff0c;点击编辑图标隐藏。失去焦点保存调后台接口。 解决办法&…
最新文章