第12届蓝桥杯省赛 ---- C/C++ C组

文章目录

  • 1. ASC
  • 2. 空间
  • 3. 卡片
  • 4. 相乘
  • 5. 路径
  • 6.时间显示
  • 7.最少砝码
  • 8. 杨辉三角形
  • 9. 左孩子右兄弟

第12届蓝桥杯省赛,C/C++ C组真题,第10题不是很清楚,题解不敢乱放😁😁😁

1. ASC

在这里插入图片描述
额。。。。

#include <iostream>
using namespace std;
int main()
{printf("%d\n",'L');return 0;
}

2. 空间

在这里插入图片描述

  • 甲骨文(🤣🤣):一切的开始好吧。 – 一个字节等于8个比特位
  • 1B = 8bit;
  • 1KB = 1024B
  • 1MB = 1024KB
  • 1GB = 1024MB
  • 1 TB = 1024GB
  • 打住吧,够用了。

在这道题中告诉我们256MB,我们知道32位,在C/C++中一个int是正好4个字节,也就是32个bit。
所以直接256 * 1024 * 1024 / 4就是答案。
当然也可以全部换算成bit位来算,256 * 1024 * 1024 * 8 / 32但要注意开long long

#include <iostream>
using namespace std;int main()
{//1个字节 = 8个bit位//1B = 8个bit。//1KB = 1024B。//1MB = 1024KB//1GB = 1024MB;// int = 4个字节, = 32位printf("%d\n",256 * 1024 * 1024 / 4);//printf("%lld\n",(long long)256 * 1024 * 1024 * 8 / 32);return 0;
}

3. 卡片

在这里插入图片描述
题目要求从给定的0~9 共2021张卡片,然后问我们最多能拼到哪里?
比如例子中1~9各有三张。 1 ~ 10 已经浪费了两个1, 11还需要两个1,所以拼不成,答案就是10.
填空题,不卡时间,也不用在意时间复杂度了,只要你程序没写死循环,你可以永远相信computer的速度,暴力就好了。

#include <iostream>
using namespace std;int h[10];int main()
{for (int i = 0; i <= 9; i++)h[i] = 2021;for (int i = 1; true; i++){int t = i;while (t){int dig = t % 10;if (!h[dig])	//卡片用完了	h[dig] == 0{printf("%d\n", i - 1);	//注意是返回前一个构造好的,不是当前的return 0;}h[dig]--;	//减去这一位的次数。t /= 10;}}return 0;
}

4. 相乘

在这里插入图片描述
直接对题目进行模拟,看到这么大的数,我的建议是不管3721直接转long long

#include <iostream>
using namespace std;typedef long long LL;int main()
{for (int i = 1; i <= 1000000007; i++){if ((LL)i * 2021 % 1000000007 == 999999999){printf("%lld\n", i);break;}}   return 0;
}

5. 路径

在这里插入图片描述
求1 ~ 2021直接的最短路,然后边的话,如果两点之间的绝对值小于21的话就是他俩的最小公倍数,如果大于21的话就没有边。

  1. 创图
  2. 求最短路

填空题,代码有点搓,海涵。
最小公倍数 = a * b / 最大公约数。
这一道题全是模板。

#include <bits/stdc++.h>
using namespace std;const int N = 1e6 + 10, INF = 0x3f3f3f3f;typedef pair<int, int> PII;int h[N], e[N], w[N], ne[N], idx;
int dist[2100];
bool st[2100];int gcd(int a, int b);
int lcm(int a, int b);void Add(int a, int b, int c)
{e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}void Dijkstra()
{memset(dist, 0x3f, sizeof dist);dist[1] = 0;priority_queue<PII, vector<PII>, greater<PII> > heap;heap.push({ 0, 1 });while (heap.size()){auto t = heap.top();heap.pop();int v = t.second;if (st[v])  continue;st[v] = true;for (int i = h[v]; i != -1; i = ne[i]){int j = e[i];if (dist[j] > dist[v] + w[i]){dist[j] = dist[v] + w[i];heap.push({ dist[j], j });}}}
}int main()
{//创建图memset(h, -1, sizeof h);for (int i = 1; i <= 2021; i++){for (int j = i + 1; j <= 2021; j++){if (abs(i - j) <= 21){int t = lcm(i, j);Add(i, j, t);}}}//Dijkstra();if (dist[2021] == INF)printf("找不到\n");elseprintf("%d\n", dist[2021]);return 0;
}int gcd(int a, int b)
{return b ? gcd(b, a % b) : a;
}
int lcm(int a, int b)
{return a * b / gcd(a, b);
}

6.时间显示

在这里插入图片描述
题目要求:
给我们一个毫秒数,因为不用管年份和毫秒,所以我们只需要计算出多余的东西就好了。
基础的时间换算知识就能解决这题

  • 1秒 = 1000毫秒
  • 1分钟 = 60秒
  • 1 小时 = 60分钟
  • 1 天 = 24小时。

要注意输出格式,小于10的数前面需要加0。

#include <bits/stdc++.h>
using namespace std;typedef long long LL;int main()
{LL sum;scanf("%lld",&sum);sum /= 1000;	//int h = sum % (60*60*24) / (60*60);int t = sum % (60*60) / 60;int s = sum % 60;if (h < 10)printf("0%d:", h);elseprintf("%d:",h);if (t < 10)printf("0%d:", t);elseprintf("%d:",t);if (s < 10)printf("0%d", s);elseprintf("%d",s);return 0;
}

7.最少砝码

在这里插入图片描述
在这里插入图片描述
题目要求:
输入一个整数n,要求我们从1~n之内选出最少的数像一个天平那样表示其中的所有数。
思路:
水个题解把,3进制什么鬼,用三进制能表示的数只要 >= 所给定的范围,那么其的幂就是最少数的个数。
不行看看别人的题解,Acwing和蓝桥杯官网都有题解。
传送门~~~~~~~

#include <bits/stdc++.h>
using namespace std;typedef long long LL;int main()
{LL x,sum = 0;int res = 0;scanf("%lld", &x);while (sum < x){sum += pow(3, res++);}printf("%d\n", res);return 0;
}

8. 杨辉三角形

在这里插入图片描述
题目要求:
给我们一个数,然后求其在杨辉三角中的第几位。
思路:
暴力枚举:
杨辉三角都会构造,我们预处理出来前1000行的杨辉三角,最多1000行,多了会爆。
然后一一枚举就好了。可以过40%的测试用例

#include <bits/stdc++.h>using namespace std;const int N = 1e3 + 10;int n = 1000;
int a[N][N];int main()
{a[1][1] = 1;for (int i = 2; i <= n; i ++) for (int j = 1; j <= i; j ++)a[i][j] = a[i - 1][j] + a[i - 1][j - 1];int x;scanf("%d", &x);int cnt = 0;for (int i = 1; i <= n; i ++) for (int j = 1; j <= i; j ++){cnt ++;if (a[i][j] == x) {printf("%d\n",cnt);return 0;}}       return 0;
}

二分 + 找规律
观察下图我们可以发现杨辉三角其实是一个对称的,所以我们只对其进行一半的操作就好了。
我们就可以对其进行二分的操作了,很妙!!!。
这个是视频题解y总真的讲的非常的详细。
在这里插入图片描述

#include <bits/stdc++.h>using namespace std;typedef long long LL;LL n;LL C(int a, int b)
{LL res = 1;for (int i = a, j = 1; j <= b; i--, j++){res = res * i / j;if (res > n)return res;}return res;
}bool check(int k)
{// l 是下限, r 是上限 LL l = 2 * k, r = max(l, n); while (l < r){int mid = l + r >> 1;if (C(mid,k) >= n)r = mid;elsel = mid + 1;}//二分完成之后r == l 是下限 if (C(r,k) != n)	return false;printf("%lld\n", r * (r + 1) / 2 + k + 1);return true;
} int main()
{scanf("%lld", &n);// k 枚举的上限 for (int k = 16; ; k--){if (check(k))break;}return 0;
}

9. 左孩子右兄弟

在这里插入图片描述

题目要求:
给我构造一棵树,然后将其转化为左孩子有兄弟的表示方式方式,使其的深度最大。
左孩子右兄弟,

  • 左孩子,就是将r节点的左孩子变成原本节点的孩子其中任意一个,没有的话就空着。
  • 右兄弟呢,就是r节点的兄弟,如果没有兄弟节点,右孩子也空着。

蓝桥的题目没有图片,可以去Acwing上也有这道题目,并且有图片。
在这里插入图片描述
思路:
我们其实通过这张图就可以发现,只需要将其孩子最多的那个子树放在最后就可以是整棵树拉长了,而右孩子永远是右兄弟。
所以最大深度 = 子节点的数量 + 子节点所能形成的最大深度。
个人感觉有点那个树形dp的感觉。
另外注意题目中说只有一个节点的高度为0,这与我们平时所学的数据结构不一样,我们所学的只有一个节点,树的高度是1.
所以只需要在最后的时候将答案减去1就好了。
也可以在dfs函数中将高度最开始1赋值成0都可以。

#include <bits/stdc++.h>
using namespace std;const int N = 1e5 + 10;int n;
int h[N], e[N], ne[N], idx;void Add(int a, int b)
{e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}int dfs(int r)
{int hmax = 1, cnt = 0;  //hmax 为所子节点的最大高度, cnt为字节点的数量for (int i = h[r]; i != -1; i = ne[i]){int j = e[i];hmax = max(hmax, dfs(j));cnt++;}return hmax + cnt;
}int main()
{scanf("%d", &n);memset(h, -1, sizeof h);for (int i = 2; i <= n; i++){int p;scanf("%d", &p);Add(p, i);}printf("%d\n", dfs(1) - 1);return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【WEEK6】 【DAY1】DQL查询数据-第一部分【中文版】

2024.4.1 Monday 目录 4.DQL查询数据&#xff08;重点&#xff01;&#xff09;4.1.Data Query Language查询数据语言4.2.SELECT4.2.1.语法4.2.2.实践4.2.2.1.查询字段 SELECT 字段/* FROM 表查询全部的某某查询指定字段 4.2.2.2.给查询结果或者查询的这个表起别名&#xff08…

Spark-Scala语言实战(13)

在之前的文章中&#xff0c;我们学习了如何在spark中使用键值对中的keys和values,reduceByKey,groupByKey三种方法。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢…

【瑞萨RA6M3】1. 基于 vscode 搭建开发环境

基于 vscode 搭建开发环境 1. 准备2. 安装2.1. 安装瑞萨软件包2.2. 安装编译器2.3. 安装 cmake2.4. 安装 openocd2.5. 安装 ninja2.6. 安装 make 3. 生成初始代码4. 修改 cmake 脚本5. 调试准备6. 仿真 1. 准备 需要瑞萨仓库中的两个软件&#xff1a; MDK_Device_Packs.zipse…

浅谈物联网高速公路智慧配电室系统构建方案

关键词&#xff1a;高速公路&#xff1b;智慧供配电&#xff1b;电力监控&#xff1b;配电室智能运维托管&#xff1b;安全隐患 0、引言 随着高速公路事业的不断发展和路网的不断延伸&#xff0c;传统的管理方式已难以满足日益增长的需求&#xff0c;动态管理和安全隐患预警成…

ubuntu16如何使用高版本cmake

1.引言 最近在尝试ubuntu16.04下编译开源项目vsome&#xff0c;发现使用apt命令默认安装cmake的的版本太低。如下 最终得知&#xff0c;ubuntu16默认安装确实只能到3.5.1。解决办法只能是源码安装更高版本。 2.源码下载3.20 //定位到opt目录 cd /opt 下载 wget https://cmak…

ADB 命令之 模拟按键/输入

ADB 命令之 模拟按键/输入 模拟按键/输入 在 ​​adb shell​​​ 里有个很实用的命令叫 ​​input​​&#xff0c;通过它可以做一些有趣的事情。 ​​input​​ 命令的完整 help 信息如下&#xff1a; Usage: input [<source>] <command> [<arg>...] Th…

leetcode.面试题 02.07. 链表相交

题目 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 思路 假a在链表A上移动,b在链表B上移动&#xff0c;a移动完在B上开始&…

javaweb学习(day11-监听器Listener过滤器Filter)

一、监听器Listener 1 Listener介绍 Listener 监听器它是 JavaWeb 的三大组件之一。JavaWeb 的三大组件分别是&#xff1a;Servlet 程 序、Listener 监听器、Filter 过滤器 Listener 是 JavaEE 的规范&#xff0c;就是接口 监听器的作用是&#xff0c;监听某种变化(一般就是对…

XRDP登录ubuntu桌面闪退问题

修改 /etc/xrdp/startwm.sh unset DBUS_SESSION_BUS_ADDRESS unset XDG_RUNTIME_DIR . $HOME/.profile

​如何使用ArcGIS Pro进行洪水淹没分析

洪水淹没分析是一种常见的水文地理信息系统应用&#xff0c;用于模拟和预测洪水事件中可能受到淹没影响的地区&#xff0c;这里为大家介绍一下ArcGIS Pro进行洪水淹没分析的方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的DEM数据&…

数据结构(六)——图的应用

6.4 图的应用 6.4.1 最小生成树 对于⼀个带权连通⽆向图G (V, E)&#xff0c;⽣成树不同&#xff0c;每棵树的权&#xff08;即树中所有边上的权值之和&#xff09;也可能不同。设R为G的所有⽣成树的集合&#xff0c;若T为R中边的权值之和最小的生成树&#xff0c;则T称为G的…

怎样把学浪上的视频保存到电脑

怎样把学浪上的视频保存到电脑,这里给大家一个工具,专门用来下载学浪上的视频 这个工具叫做小浪助手.exe 我已经打包好了,有需要的自己取一下 链接&#xff1a;https://pan.baidu.com/s/1y7vcqILToULrYApxfEzj_Q?pwdkqvj 提取码&#xff1a;kqvj --来自百度网盘超级会员V…

【三维重建】3D Gaussian Splatting:实时的神经场渲染

文章目录 摘要一、前言二、相关工作1.传统的场景重建与渲染2.神经渲染和辐射场3.基于点的渲染和辐射场4.*什么是 Tile-based rasterizer (快速光栅化) 三、OVERVIEW四、可微的三维高斯 Splatting五、三维高斯 自适应密度控制的优化1.优化2.高斯的自适应控制 六、高斯分布的快速…

计算机网络—HTTP协议:深入解析与应用实践

​ &#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;ヒステリックナイトガール 1:03━━━━━━️&#x1f49f;──────── 5:06 &#x1f504; ◀️ ⏸ ▶️ ☰…

Photoshop 2024 中文---专业图像处理软件的又一次飞跃

Photoshop 2024是一款功能强大的图像处理软件&#xff0c;广泛应用于创意设计和图像处理领域。它提供了丰富的绘画和编辑工具&#xff0c;包括画笔、铅笔、颜色替换、混合器画笔等&#xff0c;使用户能够轻松进行图片编辑、合成、校色、抠图等操作&#xff0c;实现各种视觉效果…

如何使用极狐GitLab 启用自动备份功能

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何极狐GitLab 自…

利用Node.js实现拉勾网数据爬取

引言 拉勾网作为中国领先的互联网招聘平台&#xff0c;汇集了丰富的职位信息&#xff0c;对于求职者和人力资源专业人士来说是一个宝贵的数据源。通过编写网络爬虫程序&#xff0c;我们可以自动化地收集这些信息&#xff0c;为求职决策和市场研究提供数据支持。Node.js以其非阻…

基于Python的豆瓣电影评分可视化,豆瓣电影评分预测系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【stm32】I2C通信外设

【stm32】I2C通信外设 概念部分 如果简单应用&#xff0c;选择软件I2C。如果对性能指标要求比较高 选择硬件I2C 有硬件电路自动反转引脚电平&#xff0c;软件只需要写入控制寄存器CR和数据寄存器DR 为了实时监控时序的状态&#xff0c;还要读取状态寄存器SR 写入控制寄存器CR…

nodeJs 实现视频的转换(超详细教程)

前段时间拿到一个视频是4k的&#xff0c;没法播放&#xff0c;于是通过 node.js 和 ffmpeg 实现了视频的转换。在win10 系统下实现。 所需工具 node 16.19 直接安装 ffmpeg-5.1.1-essentials_build 解压后重名 ffmpeg 放到C盘 然后配置下环境变量 Git-2.42.0.2-64-bit 直接…