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

目录

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

代码:

 题目二(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;
}

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

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

相关文章

【JAVASE】学习数组的定义与使用

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a; 再无B&#xff5e;U&#xff5e;G-CSDN博客 目标&#xff1a; 1. 理解数组基本概念 2. 掌握数组的基本用法…

星际门计划:微软与OpenAI联手打造未来AI超级计算机

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

windows安装mysql

win r cmd 以管理员权限运行。数据库配置文件my.ini放到安装包里&#xff0c;配置文件内路径根据实际情况修改&#xff0c;配置文件字符集根据实际需要修改。 1、cd c:\mysql\bin切换目录 2、mysqld --initialize --console 初始化数据库&#xff0c;初始化完成…

[操作系统课设]GeeKOS操作系统的研究与实现

一.GeekOS操作系统概论 1.1教学操作系统 &#xff08;1&#xff09;针对RISC结构MIPS处理器 操作系统&#xff1a;Nachos、OS/161 &#xff08;2&#xff09;针对CISC结构Intel IA-32 (or x86)通用处理 操作系统&#xff1a;MINIX、GeekOS 我们用到的是&#xff1a;GeekOS 1&…

SpringMvc执行流程源码解析

一、简介 Spring web Mvc是基于ServletApi构建的原始Web模块&#xff0c;从一开始就包含在Spring框架中&#xff1b; 从Servlet到SpringMvc 最典型的MVc就是JSPServletjavaBean的模式&#xff1b; 弊端&#xff1a; 1、xml下配置Servlet的映射非常麻烦&#xff0c;效率低&…

OpenHarmony实战:命令行工具hdc安装应用指南

一、工具概述 hdc&#xff08;OpenHarmony Device Connector&#xff09;是为开发人员提供的用于设备连接调试的命令行工具&#xff0c;该工具需支持部署在 Windows/Linux/Mac 等系统上与 OpenHarmony 设备&#xff08;或模拟器&#xff09;进行连接调试通信。 简言之&#xf…

16进制的字符串转byte[]数组 以及将字节数组转换成十六进制的字符串

16进制的字符串转byte[]数组 public class ClientString16 {@Testpublic void get16Str(){String str="48 47 12 00 14 12 16 08 15 0d 30 0f 02 30 30 30 30 30 30 30 30 30 30 00 c2";byte[] bytes = hexStringToByteArray(str);getBytetoString(bytes);//String …

Redis实战篇-添加优惠卷

3.3 添加优惠卷 每个店铺都可以发布优惠券&#xff0c;分为平价券和特价券。平价券可以任意购买&#xff0c;而特价券需要秒杀抢购&#xff1a; tb_voucher&#xff1a;优惠券的基本信息&#xff0c;优惠金额、使用规则等 tb_seckill_voucher&#xff1a;优惠券的库存、开始抢…

(一)基于IDEA的JAVA基础10

相信最近许多朋友学习语言可能会有焦虑&#xff0c;“现在人工智能这么发达&#xff0c;丢个指令进去它就还给你一个结果&#xff0c;我们学习它还有意义吗&#xff1f;”。 对于这个问题&#xff0c;就像我们小学学习算数&#xff0c;我们明知道有计算器这么方便的东西&#…

Java 处理Mysql获取树形的数据

Mysql数据&#xff1a; 代码如下&#xff1a; Entity&#xff1a; Data Accessors(chain true) public class Region {private BigInteger id;//名称private String name;//父idprivate BigInteger parentId;private List<Region> children;private Integer createTim…

Spring 事件广播机制详解

前言 写这篇文章的初衷源自对 Spring 框架中事件机制的好奇心。在编写观察者模式代码示例时&#xff0c;我突然想起了 Spring 框架中支持多事件监听的特性&#xff0c;例如ContextClosedEvent、ContextRefreshedEvent、ContextStartedEvent等等。传统的观察者模式通常是基于单…

基于springboot+vue实现的驾校信息管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…

YOLOv9改进策略 :IoU优化| Inner-IoU基于辅助边框的IoU损失,高效结合新型边界框相似度度量(MPDIoU)| 二次创新

💡💡💡本文独家改进:Inner-IoU引入尺度因子 ratio 控制辅助边框的尺度大小用于计算损失,新型边界框相似度度量(MPDIoU)MPDIoU损失进行有效结合 💡💡💡适用场景:小目标数据集,进一步提升检测精度,强烈推荐 《YOLOv9魔术师专栏》将从以下各个方向进行创新: …

【Java八股面试系列】Arraylist和HashMap的底层原理

文章目录 ArrayList源码总&#xff1a;构造方法扩容机制remove HashMap总&#xff1a;构造方法细节问题putVal()方法resize()方法Hash值 HashMap常见问题 ConcurrentHashMap总&#xff1a;putVal()方法自己的测试 为什么重写HashCode和equals ArrayList源码 总&#xff1a; *…

代码随想录算法训练营三刷day41 | 动态规划之 343. 整数拆分 96.不同的二叉搜索树

三刷day41 343. 整数拆分确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp的初始化确定遍历顺序举例推导dp数组 96.不同的二叉搜索树确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组…

2024年,我写了一个视频去水印的微信小程序

花了两天时间&#xff0c;写了一个简单的微信小程序&#xff0c;主要为了学习一下微信小程序相关的知识。 目录 一、功能介绍 二、页面展示 三、简单总结 四、在线体验 一、功能介绍 小程序的主要功能是对目前的主流视频平台的视频进行去水印处理。 项目难点在于收集各个平…

关于多物理场耦合仿真的相关思考

关于多物理场耦合仿真&#xff0c;写点自己的思考。 1 核心本质 多物理场耦合仿真&#xff0c;听起来是个挺高大上的名词。不少人被各种名词创新搞得云里雾里&#xff0c;不知所谓。 实际上&#xff0c;多物理场耦合仿真理解起来并不算复杂。搞清楚了本质&#xff0c;做多物理…

LeetCode-热题100:160. 相交链表

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&…

“美国债务螺旋上升,每百天膨胀万亿”!华尔街:投入比特币是明智之举,美元早晚垮台?

​ 前不久&#xff0c;黄金和比特币价格的双双逼近历史高位&#xff0c;再度吸引了不少金融市场参与者的关注。虽然这两类资产大涨的背后&#xff0c;有着诸如比特币减半临近、地缘局势引发避险等各自的原因&#xff0c;但也有一些业内人士提到了美国政府债务规模激增等无法回…

day_2FreeRTOS使用PWM+ADC光敏电阻完成光控灯实验

主要代码&#xff1a; int adc_val0;//保存ADC采集到的数值 float volt0;//保存电压值HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);//打开定时器的PWM通道3 TIM3->CCR30;//改变CCR的值&#xff0c;范围0——999&#xff0c;不能超过ARRwhile (1){ HAL_ADC_Start(&had…