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

news2024/11/19 2:38:38

文章目录

  • 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");
    else
        printf("%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);
    else
        printf("%d:",h);
    
    if (t < 10)
        printf("0%d:", t);
    else
        printf("%d:",t);
  
    if (s < 10)
        printf("0%d", s);
    else
        printf("%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;
		else
			l = 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.coloradmin.cn/o/1573292.html

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

相关文章

【数据库】SQL简介

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是一种用于管理关系型数据库管理系统&#xff08;RDBMS&#xff09;的标准化语言。它用于访问和操作数据库中的数据&#xff0c;执行各种任务&#xff0c;如插入、更新、删除和检索数据&#x…

为何一个网卡需要配置多个IP地址?

在Linux环境中&#xff0c;一个网卡配置多个IP地址是一个常见且强大的网络管理策略&#x1f6e0;️。这种策略不仅增加了网络的灵活性和效率&#xff0c;还能满足特定的网络需求和应用场景&#x1f3af;。让我们一探究竟&#xff0c;看看在哪些情况下&#xff0c;为什么一个网卡…

可行驶区域(freespace)如何标注

可行驶区域&#xff08;freespace&#xff09;如何标注 附赠自动驾驶学习资料和量产经验&#xff1a;链接 可行驶区域的检测主要是为自动驾驶提供路径规划辅助&#xff0c;可以实现整个的路面检测&#xff0c;也可以只提取出部分的道路信息&#xff0c;不同的环境&#xff0c;…

HAL STM32主从定时器联级使用

HAL STM32主从定时器联级使用 具体介绍参考STM32参考手册 &#x1f33f;主从定时器联级&#xff1a;使用一个定时器作为另一个定时器的预分频器。 &#x1f341;时钟关系&#xff1a; &#x1f33f;TIM1 和TIM8 控制寄存器 2(TIMx_CR2)相关位&#xff1a; &#x1f516;主…

静态路由协议实验综合实验

需求&#xff1a; 1、除R5的换回地址已固定外&#xff0c;整个其他所有的网段基于192.168.1.0/24进行合理的IP地址划分。 2、R1-R4每台路由器存在两个环回接口&#xff0c;用于模拟连接PC的网段&#xff1b;地址也在192.168.1.0/24这个网络范围内。 3、R1-R4上不能直接编写到…

opencv+python(通道的分离与合并)笔记

分割图像通道&#xff1a; 通过函数mvsplit(img)&#xff1b;mv返回的通道&#xff1b; RGB有3个通道&#xff1b;灰度图只有一个通道&#xff1b; b,g,r cv2.split(img)cv2.imshow("b",b)#通道bcv2.imshow("g",g)#通道gcv2.imshow("r",r)#通道…

算法:指数的更相减损术

举例&#xff1a;当我们想求9&#xff08;3^2&#xff09;与27&#xff08;3^3&#xff09;的最大共同基&#xff0c;也就是3时&#xff0c;该怎么做呢&#xff0c;这时就要用到指数的更相减损术&#xff0c;如下图所示&#xff1a;

【mac操作】brew指令集

brew指令集记录 1. brew search 【软件名称】2. rm -rf $(brew --cache)3. brew install 【软件名】4. brew uninstall 【软件名】5. 未完待续&#xff0c;&#xff0c;&#xff0c;&#xff0c; 官网路径&#xff1a; Homebrew官网 最上面就来一个homebrew安装指令吧&#xf…

用讲故事的方式学Pandas的数据结构之Series

在一个遥远的数据王国中&#xff0c;有一个被称为Pandas的魔法图书馆&#xff0c;它拥有处理数据的强大力量。图书馆里有三位伟大的守护者&#xff0c;人们称他们为“数据处理三剑客”&#xff1a;Numpy&#xff0c;Pandas&#xff0c;和Matplotlib。今天&#xff0c;我们将聚焦…

R语言实现:统计学及计量专业中的多种平均值计算方式

平均值在计量专业和统计学中有着广泛的应用如&#xff1a;描述数据集中趋势、比较不同组数据、评估数据的代表性、决策和判断、回归分析概率统计与财务分析等。此外&#xff0c;在计量专业中&#xff0c;平均值还被广泛应用于各种测量和校准过程中&#xff0c;以确保测量结果的…

AI大语言模型GPT —— R 生态环境领域数据统计分析

自2022年GPT&#xff08;Generative Pre-trained Transformer&#xff09;大语言模型的发布以来&#xff0c;它以其卓越的自然语言处理能力和广泛的应用潜力&#xff0c;在学术界和工业界掀起了一场革命。在短短一年多的时间里&#xff0c;GPT已经在多个领域展现出其独特的价值…

博客部署001-centos安装docker

1、安装docker 1.1 卸载旧版本的 Docker sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine1.2 设置 Docker 仓库 安装 Docker Engine 之前&#xff0c;首先需要设置…

观测线程的工具——jconsole

joconsole的简单使用 joncole位置在jdk/bin路径中&#xff0c;在进入路径后可以查找到jconsole.exe的应用程序。如图&#xff1a; 双击创建jconsole进程&#xff0c;可以在里面选择所要观测的java文件。 以我的代码为例&#xff1a; class MyThread extends Thread {Overrid…

算法基础课-搜索与图论

DFS 题目链接&#xff1a;842. 排列数字 - AcWing题库 思路&#xff1a;写的很好的题解AcWing 842. 排列数字--深度优先遍历代码注释 - AcWing #include<bits/stdc.h>using namespace std; int n; int st[10]; vector<int> a; void dfs(){if(a.size() n){for(in…

Vue 有哪些常用的指令

目录 1. 指令 v-html 1.1. 作用 1.2. 语法 1.3. 练习 2. 指令 v-show 2.1. 作用 2.2. 语法 3. 原理 4. 场景 3. 指令 v-if 3.1. 作用 3.2. 语法 3.3. 原理 3.4. 场景 4. 指令 v-else与 v-else-if 4.1. 作用 4.2. 语法 4.3. 注意 4.4. 使用场景 5. 指令 v-on 5…

详解 Redis 在 Centos 系统上的安装

文章目录 详解 Redis 在 Centos 系统上的安装1. 使用 yum 安装 Redis 52. 创建符号链接3. 修改配置文件4. 启动和停止 Redis 详解 Redis 在 Centos 系统上的安装 1. 使用 yum 安装 Redis 5 如果是Centos8&#xff0c;yum 仓库中默认的 redis 版本就是5&#xff0c;直接 yum i…

Pytorch转onnx

pytorch 转 onnx 模型需要函数 torch.onnx.export。 def export(model: Union[torch.nn.Module, torch.jit.ScriptModule, torch.jit.ScriptFunction],args: Union[Tuple[Any, ...], torch.Tensor],f: Union[str, io.BytesIO],export_params: bool True,verbose: bool False…

深入浅出 -- 系统架构之负载均衡Nginx环境搭建

引入负载均衡技术可带来的收益&#xff1a; 系统的高可用&#xff1a;当某个节点宕机后可以迅速将流量转移至其他节点。系统的高性能&#xff1a;多台服务器共同对外提供服务&#xff0c;为整个系统提供了更高规模的吞吐。系统的拓展性&#xff1a;当业务再次出现增长或萎靡时…

【Java网络编程】HTTP超文本传输协议

一、HTTP超文本传输协议 HTTP全称为Hyper Text Transfer Protocol超文本传输协议&#xff0c;它是基于TCP传输协议构建的应用层协议&#xff0c;作为支撑万维网www的核心协议&#xff0c;为了保证其效率及处理大量事务的能力&#xff0c;因此在设计时&#xff0c;HTTP被制定成为…

前端学习笔记:display(未完成)

这是本人学习的总结&#xff0c;主要学习资料如下 目录 1、一般属性2、flex系列2.1、flex容器的维度2.2、flex其他的关联属性 – 1、一般属性 display是css中的一个重要属性&#xff0c;它的值基本决定了元素的布局。这里就对它的值如何影响元素布局做一个总结。 display:bl…