蓝桥杯第十三届c++大学B组详解

目录

1.九进制转十进制

2.顺子日期

3.刷题统计

4.修剪灌木

5.x进制的减法

6.统计子矩阵

7.积木画

8.扫雷

9.李白打酒

10.砍竹子


1.九进制转换十进制

题目解析:就是将2022的每一位拿出来乘以9的n-1次方的和就是最终答案。次方是从0开始的到n-1.

#include <iostream>
using namespace std;


int pow(int a, int b)
{
    int ret = 1;
    if(b == 0)
       return 1;
    else
    {
        while(b--)
        {
            ret *= a;
        }
    }
    return ret;
}

int main()
{
    int n = 2022;
    int change = 0;
    for(int i = 0; i <= 3; i++)
    {
       int t = n % 10;
       change += pow(9, i) * t;
       n /= 10;
    }
    cout << change << endl;
    return 0;
}

2.顺子日期

 题目解析:这个题目手算也很快.

012 123 234 345...

因为月日的要求只能有012 和123;

那么就只要将数字全部转变为字符串,然后再找上面两个字符存不存在就可以确定了。

#include <iostream>
#include<string>
using namespace std;

bool check(int year, int month, int day)
{
    string str = to_string(year);
    if(month < 10) 
    str += '0';
    str += to_string(month);
    if(day < 10)
    str += '0';
    str += to_string(day);
    
    return (str.find("012") != -1 || str.find("123") != -1);
}

int main()
{
    int year = 2022;
    int ans = 0;
    int Month[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    for(int month = 1; month <= 12; month++)
    {
        for(int day = 1; day <= Month[month]; day++)
        {
             if(check(year, month, day))
             {
                 ans++;
             }
        }
    }
    cout << ans << endl;
    return 0;
}

3.刷题统计

 题目解析:题目比较简单,就是加和加上判断。最后返回日期即可。

#include <iostream>
using namespace std;


int main()
{
  long long  a, b, n;
  cin >> a >> b >> n;
  long long sum = 0;
  long long day = 0;

  while(1)
  { 
    if(sum >= n)
    {
        cout << day << endl;
        return 0;
    }

    for(int i = 1; i <= 7; i++)
    {
        if(sum >= n)
        {
          cout << day << endl;
          return 0;
        }
        
        if(i >= 1 && i <= 5)
        {
            sum += a;
        }
        else
        {
            sum += b;
        }
        day++;
    }
  }
  return 0;
}

 后面想了一下只过了6个用例,那么就是数据肯定太大,处理出错了.

 

#include <iostream>
using namespace std;

int main()
{
   long long a, b, n;
   cin >> a >> b >> n;
   
   long long week = a * 5 + b * 2;//一周做题量
   long long num = (n / week) * week;//花费周数的做题量;
   long long day = (n / week) * 7;//花费天数.
   while(n - num > 0)
   {
       if(day % 7 < 5)
           num += a;
       else
           num += b;
       day++;
   }
   cout << day << endl;
   return 0;
}

4.修剪灌木

 题目解析:这个题目;自己可以写几个看看规律。

每次剪树的移动时间就会给树的生长提供时间间隙;

那么就可以分三种情况:

1.从左到右边进行剪第一次,那么就是从开始剪的地方到现在剪的地方的天数就是可以长高的高度就是i。

2.从左到右边再从右边拐到左边剪,那么就是 i, i + 1, i + 2, ..., n, n -1 , n - 2, ...., i;

那么生长高度就是2*(n - i);

3.从右边到左边再拐到右边剪,那么就是  i - 1, i -2, i -3 ..., 1, 2, ..., i;

那么生长的高度就是2(i - 1);

#include <iostream>
using namespace std;


int maxtreelenth(int a, int b, int c)
{
   if(a > b)
   {
      if(a > c)
         return a;
      else
         return c;
   }
   else
   {
       if(c > b)
          return c;
       else
          return b;
   }
}

int main()
{
  int n, i;
  cin >> n;

  for(int i = 1; i <= n; i++)
  {
     cout << maxtreelenth(i, 2 * (n - i), 2 * (i - 1)) << endl;
  }
  return 0;
}

5.x进制的减法

 题目解析:可以参考一下这篇博客,暂时我还没想到这个题目如何写.

X 进制减法 — 蓝桥杯E题_x进制减法 100 【题目描述】 进制规定了数字在数位上逢几进一。 x 进制是一种-CSDN博客

 

#include<iostream>
#include<algorithm>

using namespace std;

const int N = 1e5 + 10,MOD = 1e9 + 7;

int n,m1,m2,m;
int a[N],b[N];

int main(){
    cin >> n >> m1;
    for(int i = m1 - 1;i >= 0;i --) cin >> a[i];
    cin >> m2;
    for(int i = m2 - 1;i >= 0;i --) cin >> b[i];
    int m = max(m1,m2);
    int res = 0;
    for(int i = m;i >= 0;i --){
        res = (res * (long long)(max({2,a[i] + 1,b[i] + 1})) + a[i] - b[i]) % MOD;
    }
    cout << res << endl;
    return 0;
}

6.统计子矩阵

 题目解析:

 6.统计子矩阵:

 题目解析:前缀和+双指针,将原矩阵加和得到sum矩阵,然后使用双指针进行矩阵的值判断.

例子:

3 4 10

1 2 3 4

5 6 7 8

9 10 11 12

sum矩阵:

1 2 3 4 

6 8 10 12

15 18 21  24

使用双指针 L 和R 进行遍历矩阵范围的控制.最好自己画一下图更好理解上手,然后去写代码

#include<iostream>
using namespace std;

#define maxn 505
int a[maxn][maxn];
int sum[maxn][maxn];

int main()
{
    int n, m, k;
    cin >> n >> m >> k;
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
        {
            cin >> a[i][j];
            sum[i][j] = a[i][j] + sum[i - 1][j];
        }
    }

    long long m_cout = 0;
    for(int x = 1; x <= n; x++)
    {
        for(int y = x; y <= n; y++)
        {
            for(int r = 1, l = 1, s = 0; r <= m; r++)
            {
                s += sum[y][r] - sum[x - 1][r];
                while(s > k && l < r)
                {
                    s = s - sum[y][l] + sum[x - 1][l];
                    l++;
                }
                if(s <= k)
                {
                   m_cout += r - l + 1;
                }
            }
        }
    }
    cout << m_cout << endl;
    return 0;
}

7.积木画

 题目解析:动态dp解决,要画图更好理解.

dp[i][4]:

dp[i][0]: 表示积木第i列的上下都没有堆积木;

dp[i][1]: 表示积木第i列的上面没有堆积木,下面摆放了积木;

dp[i][2]: 表示积木第i列的下面没有堆积木,上面摆了积木;

dp[i][3]:表示积木第i列的上下都摆放了堆积木;

那我们来看状态方程如何推导:

首先初始化:

当n == 0;dp[0][3] = 1可以理解为全部摆放好了;

当n == 1; dp[1][3] = 1;只有一种摆放方式;

dp[i][0]推导:

那么前面的i -1 一定是以及摆放好的了;所以

dp[i][0] = dp[i - 1][3];

然后就是dp[i][1]:

有下面两种情况:

dp[i][1] = dp[i - 1][0] + dp[i -1][2];

dp[i][2]:

dp[i][2] = dp[i - 1][0] + dp[i - 1][ 1];

dp[i][3]:

dp[i][3] = dp[i - 2][3] + dp[i -1][3] + dp[i - 1][2] +dp[i - 1][1];

 

#include<iostream>
using namespace std;
#define N 10000001
#define MOD 1000000007

int n;
long long dp[N][3];

void slove()
{
   cin >> n;
   dp[0][3] = 1;
   dp[1][3] = 1;

   for(int i = 2; i <= n; i++)
   {
       dp[i][0] = dp[i - 1][3];
       dp[i][1] = (dp[i - 1][0] + dp[i -1][2]) % MOD;
       dp[i][2] = (dp[i - 1][0] + dp[i - 1][ 1]) % MOD;
       dp[i][3] = ((dp[i - 2][3] + dp[i -1][3]) % MOD + (dp[i - 1][2] +dp[i - 1][1]) % MOD) % MOD;
   }
   cout << dp[n][3] << endl;
}

int main()
{
    slove();
    return 0;
}

8.扫雷

 题目解析:这个题目一看就是要使用到dfs深搜

 

#include <iostream>
using namespace std;

int n, m;
int a[102][102] = {0};
int dx[8] = {0, 0, -1, 1, -1, -1, 1, 1};
int dy[8] = {-1, 1, 0, 0, -1, 1, -1, 1};
int vis[102][102] = {0};

void dfs(int x, int y)
{
    if(x > n && y > m)
       return;
    vis[x][y] = 1;

    for(int k = 0; k < 8; k++)
    {
       int xx = dx[k] + x;
       int yy = dy[k] + y;
       if(xx >= 1 && x <= n && yy >= 1 && yy <= m)
       {
           if(a[xx][yy] = 1 && vis[xx][yy] == 0)
           {
               a[x][y] += a[xx][yy];
               vis[xx][yy] = 1;
               dfs(x + 1, y + 1);
           }
       }
    }
}

int main()
{
   cin >> n >> m;
   for(int i = 1; i <= n; i++)
   {
      for(int j = 1; j <= m; j++)
      {
         cin >> a[i][j];
      }
   }

    dfs(1, 1);
    for(int i = 1; i <= n; i++)
   {
      for(int j = 1; j <= m; j++)
      {
         cout << a[i][j];
      }
       cout << endl;
   }
   return 0;
}

9.李白打酒

 题目解析:又是动态dp,dp[i][j][k]表示遇到第i个店第j个花酒剩下k斗酒的方案数;

初始化: dp[0][0][2] = 1;

当最后一次遇到的是店,动态方程就是 dp[i][j][k] = dp[i][j][k] + dp[i-1][j][k / 2];

因为喝酒的数目和遇到花的次数挂钩,那么最少酒的斗数就是遇到花的次数.

最后一次遇到的是花,那么酒的数量一定要大于大于1;

 那么就是dp[i][j][k] = dp[i][j - 1][k + 1];

需要注意最后返回的是dp[n][m - 1][1];因为最后一次遇到花之前必须是至少还剩下一斗酒.

 

#include <iostream>
using namespace std;
#define N 101

long long dp[N][N][N];

int main()
{
    int n, m;
    cin >> n >> m;
    dp[0][0][2] = 1;
    for(int i = 0; i <= n; i++)
    {
        for(int j = 0; j <= m; j++)
        {
            for(int k = 0; k <= m; k++)
            {
                if(i && k % 2 == 0)//遇到店;
                   dp[i][j][k] = dp[i][j][k] + dp[i - 1][j][k / 2];
                if(j)//遇到花
                   dp[i][j][k] = dp[i][j][k] + dp[i][j - 1][k + 1];
            }
        }
    }
    cout << dp[n][m - 1][1] << endl;
    return 0;
}

10.砍竹子

 题目解析:这个题目用到贪心,暴力;将竹子用魔法公式进行处理,但是如果竹子的长度一样就可以一起砍.得到的次数是一样的.

#include <iostream>
using namespace std;
#include<vector>
#define N 200000
#include<cmath>

int n;
vector<long long> e[N]; 

int main()
{
   cin >> n;
   vector<long long> a(n);
   for(auto& x : a)
       cin >> x;
   long long ans = 0;
   for(int i = 0; i < n; i++)
   {
      long long tmp = a[i];
      while(tmp > 1)
      {
          e[i].push_back(tmp);
          tmp = sqrt(tmp / 2 + 1);
          ans++;
      }
   }

   for(int i = 1; i < n; i++)
   {
     for(long long x : e[i - 1])
     {
         for(long long tmp : e[i])
         {
             if(x == tmp)
                ans--;
         }
     }
   }
   cout << ans << endl;
   return 0;
}

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

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

相关文章

蓝桥杯物联网竞赛_STM32L071_16_EEPROM

仍然是没有考过的知识点 朴素的讲就是板子中一块不会因为断电重启而导致数值初始化的一片地址 要注意的是有时候容易把板子什么写错导致板子什么地址写坏了导致程序无法烧录&#xff0c;这个时候记得一直按flash键烧录&#xff0c;烧录时会报错&#xff0c;点击确定&#xff0…

什么是MOV视频格式?如何把MP4视频转MOV视频格式?

一&#xff0c;前言 当然可以&#xff0c;MP4视频可以转换为MOV格式。这两种格式都是常见的视频文件格式&#xff0c;它们都可以用于存储和播放视频内容。虽然它们的编码方式和特性有所不同&#xff0c;但使用合适的视频转换工具可以轻松地将MP4视频转换为MOV格式。 二&#…

【洛谷 P8804】[蓝桥杯 2022 国 B] 故障 题解(概率论+条件概率+贝叶斯公式)

[蓝桥杯 2022 国 B] 故障 题目描述 在软件或系统开发中&#xff0c;我们会遇到各种各样的故障。为了从故障现象反推故障原因&#xff0c;工程师们会总结一种叫做相关性矩阵的二维表格&#xff0c;来表示故障原因与故障现象之间的关系。比如: 其中每行表示一种故障原因&#x…

bugku-web-你从哪里来

这里就这一句话提示&#xff0c;问我是不是谷歌的&#xff1f; 用谷歌浏览器访问 没看见什么变化 抓包查看 没有变化 这时我想到爬虫中的反爬策略中有一种&#xff0c;判断请求的当前界面来判断用户的起始判断位置 这时抓取报文 GET / HTTP/1.1 Host: 114.67.175.224:1516…

Ollama教程——兼容OpenAI API:高效利用兼容OpenAI的API进行AI项目开发

相关文章: Ollama教程——入门&#xff1a;开启本地大型语言模型开发之旅 Ollama教程——模型&#xff1a;如何将模型高效导入到ollama框架 Ollama教程——兼容OpenAI API&#xff1a;高效利用兼容OpenAI的API进行AI项目开发 Ollama教程——兼容OpenAI API&#xff1a;高效利用…

阿里云服务器项目部署docker-compose+vue+redis+nginx+minio+springboot

1 阿里云服务器项目部署-单机部署 docker-compose 1.1 搭建背景 服务器 阿里云服务器 前端 vue 后端 springboot 服务 redis 、nginx、minio 都做单机模式部署,不做集群部署 博客内容参考了其他博文&#xff0c;会贴出来 1.2 <重要>端口开放前提说明 任何开放的端…

(3)(3.1) 英特尔Realsense深度摄像头(三)

文章目录 前言 10 系统概述 11 手动设置配套计算机 前言 本文介绍如何将英特尔 Realsense 深度摄像头(Intel Realsense Depth Camera)与 ArduPilot 配合使用&#xff0c;以实现避障(obstacle avoidance)。该方法使用在配套计算机上运行的 Python 脚本&#xff08;非 ROS&am…

【算法】模拟

个人主页 &#xff1a; zxctscl 如有转载请先通知 题目 前言1. 1576. 替换所有的问号1.1 分析1.2 代码 2. 495. 提莫攻击2.1 分析2.2 代码 3. 6. Z 字形变换3.1 分析3.2 代码 4. 38. 外观数列4.1 分析4.2 代码 5. 1419. 数青蛙5.1 分析5.2 代码 前言 模拟算法就是根据题目所给…

怎么开发一个预约小程序_一键预约新体验

预约小程序&#xff0c;让生活更便捷——轻松掌握未来&#xff0c;一键预约新体验 在快节奏的现代生活中&#xff0c;我们总是在不断地奔波&#xff0c;为了工作、为了生活&#xff0c;不停地忙碌着。然而&#xff0c;在这繁忙的生活中&#xff0c;我们是否曾想过如何更加高效…

【力扣】101. 对称二叉树

101. 对称二叉树 题目描述 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false 提示…

什么是云原生

什么是云原生 云原生的定义 aws&#xff1a; 云原生是在云计算环境中构建、部署和管理现代应用程序的软件方法。现代公司希望构建高度可伸缩、灵活和有弹性的应用程序&#xff0c;以便能够快速更新以满足客户需求。为此&#xff0c;他们使用了支持云基础设施上应用程序开发的现…

基于YOLOv9的道路缺陷检测,加入DCNv4、自适应阈值焦点损失提升检测精度

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文内容&#xff1a;针对基于YOLOv9的道路缺陷检测进行性能提升&#xff0c;加入各个创新点做验证性试验。 DCNv4结合SPPELAN&#xff1a;mAP从原始的0.923 提升至0.935 自适应阈值焦点损失&#xff1a; mAP从原始的0.923 提升至0.93…

Mysql视图与事物与字符集实验

一 视图 1.视图的定义 视图是一个虚拟表&#xff0c;其内容由查询定义。 2.视图的优点 1&#xff09;视点集中 2&#xff09;简化操作 3&#xff09;定制数据 4&#xff09;分隔合并数据 5&#xff09;安全性好 3.语法格式及限定条件 1&#xff09;语法格式&#xff1…

基于java+springboot+vue实现的兴顺物流管理系统(文末源码+Lw)23-287

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;货运信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广…

【域适应】深度域适应常用的距离度量函数实现

关于 深度域适应中&#xff0c;有一类方法是实现目标域和源域的特征对齐&#xff0c;特征对齐的衡量函数主要包括MMD&#xff0c;MK-MMD&#xff0c;A-distance&#xff0c;CORAL loss&#xff0c; Wasserstein distance等等。本文总结了常用的特征变换对齐的函数定义。 工具 …

Vue3学习04 组件通信

Vue3学习04 组件通信 组件通信props 父 ↔ 子自定义事件 子 > 父mitt 任意组件间通信v-model 父↔子$attrs 祖↔孙$refs、$parent案例的完整代码ref注意点 provide、inject 祖↔孙piniaslot① 默认插槽② 具名插槽③ 作用域插槽 组件通信 Vue3组件通信和Vue2的区别&#xf…

LangChain的RAG实践

1. 什么是RAG RAG的概念最先在2020年由Facebook的研究人员在论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》中提出来。在这篇论文中他们提出了两种记忆类型&#xff1a; 基于预训练模型&#xff08;当时LLM的概念不像现在这么如日中天&#xff0…

CV每日论文--2024.4.11

1、InternLM-XComposer2-4KHD: A Pioneering Large Vision-Language Model Handling Resolutions from 336 Pixels to 4K HD 中文标题&#xff1a;InternLM-XComposer2-4KHD&#xff1a;开创性的大型视觉语言模型&#xff0c;可处理从 336 像素到 4K 高清的分辨率 简介&#x…

OJ 变长编码 【C】

又是跌跌撞撞完成的一道题&#xff0c;我对于位运算和进制转化这块知识点太欠缺了&#xff0c;写了这么久c的题目也没用过几次 知识点 1.取出低七位bit 使用&位运算符 与0x7F可以取出当前数的二进制最低七位&#xff0c;这里即使是整数参与运算&#xff0c;也会自动被转换…

社交革命的引领者:探索Facebook的创新策略

1. 引言&#xff1a;社交媒体的崛起 社交媒体的兴起标志着信息时代的到来&#xff0c;它不仅改变了人们的生活方式&#xff0c;也影响着整个社会结构。作为社交媒体的先驱者&#xff0c;Facebook以其创新的策略和领先的技术&#xff0c;成为了这场社交革命的引领者。从2004年马…