第十四届蓝桥杯(八题C++ 题目+代码+注解)

news2025/4/14 6:48:06

目录

题目一(日期统计 纯暴力):

代码:

 题目二(01串的熵 模拟):

代码:

 题目三(治炼金属):

代码:

 题目四(飞机降落 深度搜索):

代码:

题目五(接龙数列 动态规划):

代码:

 题目六(岛屿个数 广度优先):

 代码:

题目七(子串简写 尺取法):

代码:

题目八(整数删除):

代码:

题目一(日期统计 纯暴力):

代码:

#include <iostream>
using namespace std;
int main() 
{
    int array[100] = 
    {
        5, 6, 8, 6, 9, 1, 6, 1, 2, 4, 9, 1, 9, 8, 2, 3, 6, 4, 7, 7,
        5, 9, 5, 0, 3, 8, 7, 5, 8, 1, 5, 8, 6, 1, 8, 3, 0, 3, 7, 9,
        2, 7, 0, 5, 8, 8, 5, 7, 0, 9, 9, 1, 9, 4, 4, 6, 8, 6, 3, 3,
        8, 5, 1, 6, 3, 4, 6, 7, 0, 7, 8, 2, 7, 6, 8, 9, 5, 6, 5, 6,
        1, 4, 0, 1, 0, 0, 9, 4, 8, 0, 9, 1, 2, 8, 5, 0, 2, 5, 3, 3
    };

    int Month[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int ans = 0;

    for (int month = 1; month <= 12; ++month)//枚举月
    {
        for (int day = 1; day <= Month[month]; ++day)//枚举天
        {
            int date[8] = { 2, 0, 2, 3, month / 10, month % 10, day / 10, day % 10 };//把八位数得出
            int k = 0;

            for (int i = 0; i < 100; ++i) //遍历100个数,是否能满足有该天
            {
                if (array[i] == date[k]) //满足该位
                {
                    ++k;//下一位
                    if (k == 8) //等于8,即满足该年月日,答案加一
                    {
                        ans++;
                        break;
                    }
                }
            }
        }
    }
    cout << ans;
    return 0;
}

 题目二(01串的熵 模拟):

代码:

#include <iostream>//H(s)= -(0的个数)/(总长度)*log2((0的个数)/(总长度))*0的个数-(1的个数)/(总长度)*log2((1的个数)/(总长度))*1的个数
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
    int n = 23333333;//0出现的次数更少
    for (int i = 1; i < n / 2; ++i)
    {
        double a = i * 1.0 / n;//0的占比
        double b = (n - i) * 1.0 / n;//1的占比
        double res1,res2;
        res1 = 0 - (a * log2(a) * i);//求0的部分
        res2 = 0 - b * log2(b) * (n - i);//求1的部分
        if (abs((res1+res2) - 11625907.5798) < 0.0001)//差距在0.000内
        {
            cout << i << endl;
            break;
        }
    }
    return 0;
}

 题目三(治炼金属):

代码:

#include <iostream>
#include <algorithm>
using namespace std;
struct node
{
    int x, s;
};
bool cmp(node a, node b)//v小的排前
{
    return a.x / a.s < b.x / b.s;
}
int main()
{
    int n;
    cin >> n;
    int maxx = 1e9;
    node a[10100];
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i].x >> a[i].s;
    }
    sort(a + 1, a + 1 + n, cmp);//能满足所有的,且v为最大
    maxx = a[1].x / a[1].s;
    int minn = 0;
    for (int z = maxx; z >= 1; z--)//由最大的往前算,递减,直到有一个不满足
    {
        int flag = 0;
        for (int i = 1; i <= n; i++)
        {
            if (a[i].x / z > a[i].s)
            {
                flag = 1;
                minn = z;
                break;
            }
        }
        if (flag == 1)
            break;
    }
    cout << minn + 1 << " " << maxx;
}

 题目四(飞机降落 深度搜索):

代码:

#include <iostream>
#include <vector>
using namespace std;
struct plane// 创建飞机结构体变量
{
    int t, d, l;
};
bool vis[15];  // true表示飞机降落,false表示飞机未降落
bool flag;  // 标记是否全部安全降落
vector<plane> p(15);
int m, cnt;
void dfs(int cnt,int last)  // lasttime表示此前所有飞机降落所需的单位时间
{
    if (cnt == m)//所有飞机都可降落
    {
        flag = true;
        return;
    }
    for (int i = 0; i < m; i++)//遍历所有飞机
    {
        if (!vis[i] && p[i].t + p[i].d >= last)  // 还未降落且只有最迟降落时间(来的时刻+盘旋时间) > lasttime 的飞机才可以安全降落
        {
            vis[i] = true;
            dfs(cnt + 1, max(last, p[i].t) + p[i].l);
            vis[i] = false;
        }
    }
}

int main()
{
    int T;
    cin >> T;
    while (T--)
    {
        cin >> m;
        for (int i = 0; i < m; ++i)
            cin >> p[i].t >> p[i].d >> p[i].l;
        flag = false;
        dfs(0, 0);
        if (flag)
            cout << "YES" << endl;
        else
            cout << "NO" << endl;
    }
    return 0;
}

题目五(接龙数列 动态规划):

代码:

#include <iostream>//动态规划,类0、1背包问题
#include <string>
using namespace std;
int dp[10];//第n个时以i结尾的最长接龙序列
int main()
{
    int n;
    cin >> n;
    string s;
    int m = 0;
    for (int i = 0; i < n; i++) 
    {
        cin >> s;
        int x = s[0] - '0', y = s.back() - '0';//x表示该数的首字母,y表示该数的最后一个字母
        //除了以y结尾的,其它不变
        dp[y] = max(dp[x] + 1, dp[y]);//dp[x]+1表示选该数字时的最长序列,dp[y]表示不选该数字时的最长序列,继承
        m = max(m, dp[y]);//每次比较,记录最大值
    }
    cout << n - m << endl;
    return 0;
}

 题目六(岛屿个数 广度优先):

 代码:

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int N = 77;
string s[N];
int book[N][N];
int m, n, ans=0;
int dx[8] = { 0,0,1,-1,1,1,-1,-1 };
int dy[8] = { 1,-1,0,0,1,-1,1,-1 };
int check(int x,int y)//通过海水(0)是否能到达边界判断这个岛屿是否在环岛内
{
	queue<pair<int, int>>q;
	q.push({ x, y });
	int vis[N][N];
	memset(vis, 0, sizeof(vis));//访问数组,初始化为0
	while (!q.empty())
	{
		x = q.front().first, y = q.front().second;
		q.pop();
		if (x == 1 || x == n || y == 1 || y == m)//到边界,则不在环岛内
			return 1;
		for (int i = 0; i < 8; i++)
		{
			int tx = x + dx[i], ty = y + dy[i];
			if (vis[tx][ty] == 1 || s[tx][ty] == '1')//边界条件
				continue;
			vis[tx][ty] = 1;
			q.push({ tx,ty });
		}
	}
	return 0;
}
void bfs(int x,int y)//遍历这个岛屿
{
	queue<pair<int, int>>q;
	q.push({ x,y });
	book[x][y] = 1;
	while (!q.empty())
	{
		x = q.front().first, y = q.front().second;
		q.pop();
		for (int i = 0; i < 4; i++)
		{
			int tx = x + dx[i], ty = y + dy[i];
			if (tx<1 || ty<1 || tx>n || ty>m || book[tx][ty] == 1 || s[tx][ty] == '0')//边界条件
				continue;
			book[tx][ty] = 1;
			q.push({ tx,ty });
		}
	}
}
void solve()
{
	memset(book, 0, sizeof(book));//访问数组,初始为0
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
		cin >> s[i], s[i] = " " + s[i];
	for(int i=1;i<=n;i++)
		for (int j = 1; j <= m; j++)
		{
			if (book[i][j] == 0 && s[i][j] == '1')//没访问过且为陆地
			{
				bfs(i, j);
				if (check(i, j))//判断是否在环岛内,不在则加一
					ans++;
			}
		}
	cout << ans << endl;
}
int main()
{
	int T;
	cin >> T;
	while (T--)
	{
		ans = 0;
		solve();
	}
}

题目七(子串简写 尺取法):

代码:

#include <iostream>//尺取法
using namespace std;
int k, t;
string s;
long long sum = 0;
int main()
{
    char c1, c2;
    cin >> k >> s >> c1 >> c2;
    for (int j = 0; j < s.length(); j++)
    {
        if (s[j] == c1)  //t记录j及以前c1的个数
            t++;
        if (s[j + k - 1] == c2) //刚好满足k之后的是否为c2
            sum += t;
    }
    cout << sum;
    return 0;
}

题目八(整数删除):

代码:

#include<iostream>
#include<vector>
#include<queue>
#include<functional>//greater降序排序,less升序排序
#define int long long
using namespace std;
typedef pair<int, int> pii;
const int N = 5e5 + 10;
int a[N], l[N], r[N], st[N];//l存左下标,r存右下标
signed main()
{
    int n, k;
    cin >> n >> k;
    priority_queue<pii, vector<pii>, greater<pii>> q;//最小堆排序
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
        q.push({ a[i],i });//存值和下标
        st[i] = a[i];//存值
        l[i] = i - 1;
        r[i] = i + 1;
        if (r[i] == n) 
            r[i] = -1;
    }
    while (k)//k次操作
    {
        pii t = q.top();//取对顶
        q.pop();
        if (t.first != st[t.second])//值与之前不相等,则把新值,下标存入,重新排序
        {
            q.push({ st[t.second],t.second });
            continue;
        }
        k--;
        int pos = t.second;//取该次的下标
        if (l[pos] >= 0) st[l[pos]] += t.first;//左加值
        if (r[pos] >= 0) st[r[pos]] += t.first;//右加值
        if (l[pos] >= 0) r[l[pos]] = r[pos];//该左边值的右下标
        if (r[pos] >= 0) l[r[pos]] = l[pos];//该右边值的左下标
        st[pos] = -1;//标记为-1,表示移除队列
    }
    for (int i = 0; i < n; i++)//不等与-1的,按序输出
    {
        if (st[i] != -1)
            cout << st[i] << ' ';
    }
    return 0;
}

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

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

相关文章

UI的设计

一、RGB888的显示 即红色&#xff0c;绿色&#xff0c;蓝色都为8位&#xff0c;即通常说的24位色。可以很好显示各种过渡颜色。从硬件上&#xff0c;R、G、B三基色的连接线各需要有8根&#xff0c;即24根数据线&#xff1b;软件上存储的数据量也需要24位&#xff0c;即3个字节&…

【ERP原理与应用】用友U8实验

实验一、系统管理与基础设置 实验内容&#xff1a; 一、核算体系的建立 好友软件公司是一家软件制造和系统集成企业&#xff0c;其产品面向国内外市场&#xff0c;自 2019 年 3 月公司开始使用 ERP 软件管理业务。软件操作员有三位&#xff0c;黄红是账套 主管&#xff0c;张…

2024蓝旭春季第二次前端培训课

目录 CSS伪类与伪元素 伪类 伪元素 关系选择器 分类举例 后代选择器 子元素选择器 相邻兄弟选择器 通用兄弟选择器 作用使用场景 后代选择器&#xff08;空格&#xff09; 子元素选择器 (>) 相邻兄弟选择器 () 通用兄弟选择器 (~) 随机提问 CSS布局 基础布…

RSTP(快速生成树)

与stp的不同&#xff1a; 减少了端口的状态 增加了端口的角色 bpdu格式以及发送方式不同 1.RSTP 快速生成树 802.1w 作用&#xff1a;主要可以用来实现快速收敛&#xff0c;弥补普通生成树收敛慢的问题&#xff0c;收敛时间1s。没有时间机制&#xff0c;每台设备都会发送…

C语言------字符函数和字符串函数

在学习编程的过程中&#xff0c;我们会经常会遇到一些字符和字符串&#xff0c;为了方便操作字符和字符串&#xff0c;C语言标准库中就提供了一系列函数。那么&#xff0c;接下来就学习下这些函数。 1. 字符分类函数 C语言中有一系列的函数是专门做字符分析的&#xff0c;也就…

网络七层模型之会话层:理解网络通信的架构(五)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

飞天使-k8s知识点28-kubernetes散装知识点5-helm安装ingress

文章目录 安装helm添加仓库下载包配置创建命名空间安装 安装helm https://get.helm.sh/helm-v3.2.3-linux-amd64.tar.gztar -xf helm-v3.2.3-linux-amd64.tar.gzcd linux-amd64mv helm /usr/local/bin修改/etc/profile 文件&#xff0c;修改里面内容,然后重新启用export PATH$P…

java回溯算法笔记

回溯算法综述 回溯用于解决你层for循环嵌套问题&#xff0c;且不剪枝的回溯完全等于暴力搜索。 回溯算法模板https://blog.csdn.net/m0_73065928/article/details/137062099?spm1001.2014.3001.5501 组合问题 “不含重复元素”“不可重复使用”&#xff08;startindex i1&…

虚拟机体验 mac、Linux、Windows,老游戏和软件再也没有兼容问题

安装虚拟机 下载好 VMwareWorkstation Pro 后运行安装程序&#xff0c;根据流程完成安装&#xff1b; 勾选许可协议&#xff0c;点击「下一步」&#xff1b; 这里注意更改安装路径&#xff0c;最好选择 C 盘以外的其他磁盘&#xff0c;选择好后点击「下一步」&#xff1b; 这里…

2024/3/30面试题的总结

1.南京某公司 1.Java的几种基本数据类型&#xff1f;分别是多少字节&#xff1f; byte&#xff0c;8bit 1字节 char&#xff0c;16bit 2字节 short&#xff0c;16bit 2字节 int&#xff0c;32bit 4字节 float&#xff0c;32bit 4字节 long&#xff0c;64bit 8字节 doubl…

C++——vector类及其模拟实现

前言&#xff1a;前边我们进行的string类的方法及其模拟实现的讲解。这篇文章将继续进行C的另一个常用类——vector。 一.什么是vector vector和string一样&#xff0c;隶属于C中STL标准模板库中的一个自定义数据类型&#xff0c;实际上就是线性表。两者之间有着很多相似&…

Ubuntu系统设置静态固定IP保姆级教程

1、查看网络接口信息 ifconfig 首先需要确认要设置固定IP的网络接口。在大多数情况下&#xff0c;这通常是ens33 2、查看路由网关信息 route -n # 查看打印 路由表 网关地址 3、备份文件 为了防止防止出现意外问题。Ubuntu中的网络配置文件通常存储在/etc/netplan/目录下&…

Linux:详解TCP报头类型

文章目录 温习序号的意义序号和确认序号报文的类型 TCP报头类型详解ACK: 确认号是否有效SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段FIN: 通知对方, 本端要关闭了PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走RST: 对方要求重新建立连接; 我们把携带RST标识的称…

uniapp实现列表动态添加

1.效果图&#xff1a; 2.代码实现&#xff1a; 这里没有用uniapp提供的uni-list控件 <template> <view id"app"> <!-- 这里为了让标题&#xff08;h&#xff09;居中展示&#xff0c;给h标签设置了父标签&#xff0c;并设置父标签text-…

【零基础C语言】文件操作

目录 理解文件操作 什么是文件 程序文件 数据文件 文件名字 二进制文件和文本文件 文件的打开和关闭 文件的打开和关闭操作 实验1&#xff0c;打开一个文件并且输入26个字母 打开读取文件text.txt ,并且将它拷贝进text_cpy.txt 使用 fputs 和 fgets 函数 使用 fprintf函…

IDEA MyBatisCodeHelper Pro最新版(持续更新)

目录 0. 你想要的0.1 包下载0.2 使用jh 1. 功能介绍2. 下载安装2.1 在idea中插件市场安装2.2 在jetbrains插件市场下载安装 3. 简单使用3.1 创建一个SpringBoot项目3.2 配置数据库3.3 一键生成实体类、mapper 0. 你想要的 0.1 包下载 测试系统&#xff1a;Windows&#xff08…

el-table 合计行的一直计算的问题。

前端只有打印日志之后&#xff0c;才发现有计算在反复执行&#xff0c;导致浏览器崩溃。并不是每一列都是这个问题&#xff0c;当然输入不同值后&#xff0c;不知为何会触发如此多次。 . 在开发环境&#xff0c;他会触发几百次getSummaries,生产环境直接崩溃 合计行的代码如下…

入围中国大模型 + 知识管理最佳案例 15 强,杭州悦数 x 中国船舶项目收获认可!

近期&#xff0c;由国内知名的数字化研究与服务机构沙丘社区发布的《2024 中国“大模型知识管理”最佳实践案例 15 强》新鲜出炉&#xff0c;杭州悦数科技有限公司助力中国船舶集团有限公司第七〇八研究所打造的行业方案“基于图和多级智能体的动态排障知识问答系统”榜上有名。…

数据结构之二叉树由浅入深(四)

目录 题外话 正题 第一题 第一题思路 第一题代码详解 第二题 第二题思路 第二题代码详解 第三题 第三题思路 第三题代码及详解 第四题 第四题思路 第四题代码及详解 第五题 第五题思路 第五题代码及详解 题外话 本来昨天就想写完这篇文章,怎么样是不是很大胆?…

力扣124---二叉树的最大路径和(DFS,Java)

目录 题目描述&#xff1a; 思路描述&#xff1a; 代码&#xff1a; 题目描述&#xff1a; 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一…