2024年蓝桥杯——复盘

 1、握手问题

知识点:模拟

        这道题很简单。但是不知道考试的时候有没有写错。一开始的43个人握手,仅需要两两握手,也就是从42个握手开始,而非43.很可惜。这道题没有拿稳这5分。也很有可能是这5分导致没有进决赛。

总结:
1、将题目要求的大的数值进行抽象出来,例如写成一个变量m,n。
2、然后,使用较小的数字,将m设置为5,n设置为3。
3、然后手算看看结果是否与程序相同。
4、相同的话,再使用题目要求的数值填入n和m中。

#include<bits/stdc++.h>
using namespace std;
long long cnt;
const int n = 50;  // 总人数
const int m = 43;  // 无需特殊处理的人数
int main()
{
	// 先处理前面没有限制的43个人。  他们之间两两握手
	for (int i = m-1; i >= 1; i--)  // 注意这里不是43,而是42
	{
		cnt += i;
	}

	// 后处理有限制的7人  他们分别与上述43人握手
	cnt += 43 * (n-m);

	cout << cnt;

	return 0;
}

2、小球反弹

 

看着很难,考试的时候直接放弃了,现在也没有去写正解。

3、好数

知识点:模拟

        逻辑非常简单,10分钟不到就能够写出来。但是考试的时候很紧张,写了20分钟。没有很清晰的写出下标之间的关系,当时很乱。
        最终结果:100分。折算后:10分

#include<bits/stdc++.h>
using namespace std;
int n;
int cnt;
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        string str = to_string(i);
        int len = str.size();  // 获取数字的长度
        int b = 1;  // 当前位数
        int j;
        for (j = len - 1; j >= 0; j--)  // 从数字末尾开始判断
        {
            if (b % 2 == 1)  // 需要检测当前奇数位数的数值为奇数
            {
                if (str[j] % 2 == 1)
                {
                    b++;
                    continue;
                }
                else
                    break;
            }
            else  // 检测当前偶数位的数值是否为偶数
            {
                if (str[j] % 2 == 0)
                    b++;
                else
                    break;
            }
        }
        if (j == -1)
            cnt++;
    }

    cout << cnt << endl;
    return 0;
}

4、R格式

 知识点:高精度。

        高精度类型的题目我几乎没有做过。所以当时看到是很慌的。本题浮点数的位数很大,我仅仅使用double进行存储,肯定只能通过极少数的测试样例。
        最终结果:本题拿到24分。折算为题目的分数就是:10*0.24 = 2.4分

        当时考试过程中,想到了使用string来存储,但是写了半天,还是不知道怎么处理。
        最终写出来的效果是:string解决位数较低的情况,和直接使用double存储应该没两样。当时还不如直接使用double存储。。。
        后面想着时间还剩多的话,就回来写用string解决位数较高的情况。但是后面还是没能回来。

#include<bits/stdc++.h>
using namespace std;
int n;
double d;
int main()
{
    cin >> n >> d;
    long long temp = pow(2, n);
    double pre = d * temp;

    // 进行四舍五入——采用笨方法
    string str = to_string(pre);
    int i;
    for (i = 0; i < str.size(); i++)
    {
        if (str[i] == '.')
            break;
    }

    // 判断小数点后一位是否小于5
    if (str[i + 1] < 5)
        cout << int(pre) << endl;
    else
    {
        cout << int(pre) + 1 << endl;
    }
    return 0;
}

5、宝石组合

知识点:最大公因数、最小公倍数、XXX
        考试中,看到题目,就想到了使用dfs,dfs在考试前,自己练了好多道题目了。后来发现,直接使用for循环,也可以得到答案。很像没有必要使用dfs。考试中,浪费了很多时间进行dfs编码,最终写的还是简单的for循环。
经验:
1、写完gdc和lcm函数后,先测试一下。
2、先想出整个题目的思路,再进行编码。
3、先想想有没有什么简单的思路,在考试中先使用简单的思路进行求解。有时间再回来写正解。

结果:时间超时,但是拿到了33分。折算后就是:15*0.33 = 5分

#include<bits/stdc++.h>
using namespace std;
int n;
long long Max = -1;
int res[3];
int gcd(int a, int b)
{
	while (a % b != 0)
	{
		int r = a % b;
		a = b;
		b = r;
	}
	return b;
}

int lcm(int a, int b)
{
	return a * b / gcd(a, b);
}
int main()
{
	cin >> n;
	vector<int> v(n, 0);
	for (int i = 0; i < n; i++)
	{
		cin >> v[i];
	}

	sort(v.begin(), v.end());

	for (int i = 0; i < n; i++)
	{
		for (int j = i + 1; j < n; j++)
		{
			for (int k = j + 1; k < n; k++)
			{
				long long p1 = v[i] * v[j] * v[k];
				long long p2 = lcm(v[i], v[j]);
				long long p3 = lcm(v[i], v[k]);
				long long p4 = lcm(v[j], v[k]);
				long long p5 = lcm(p2, v[k]);
				long long temp = p1 * p5 / (p2 * p3 * p4);
				if (temp > Max)
				{
					Max = temp;
					res[0] = v[i];
					res[1] = v[j];
					res[2] = v[k];
 				}
			}
		}
	}
	
	for (int i = 0; i < 3; i++)
	{
		cout << res[i] << " ";
	}
	return 0;
}

 6、数字接龙

知识点:dfs、bfs

        老毛病了:写了40分钟,发现自己题目都没有完全搞懂。思路没有捋顺就开始编程。
        中途发现,自己平时练习的bfs和本题还是有区别的。这道题还要存储路径过程。我很少练这个。
        最终考试提交的就是一堆不完整的代码。但是写了-1的情况,所以花了40分钟,最终和花1分钟写的效果一样。

        出乎意料的是,直接输出-1居然在dot.cpp网站上能通过超过一半的测试样例, 拿到了55分!!!折算后:15*0.55 = 8分

#include<bits/stdc++.h>
using namespace std;
int main()
{
    cout << -1 << endl;
    return 0;
}

 7、爬山

知识点:贪心算法
        使用贪心策略,只考虑当前的最优解。即,先对高山进行大到小排序,魔法提前使用。
        这样子写肯定不是正解,但是在考场上,我当时的水平只能这么写着先了。

        考场上的策略不太行,应该使用别的策略。
        我当时想的是:排完序后,就对山施展魔法,直至改山比第二座山低,就对下一座山施展魔法。
        现在回想起来,存在漏洞,第一座山比第二座山低了之后,应该将第一座山插至山序列的恰当位置,而非不处理。

        以下程序是修复漏洞后的程序,通过3个测试用例,其余测试用例超时。有一个测试用例答案错误。得分:25。折算后:20*0.25 = 5

其实这题,要是不清楚优先使用魔法1还是2,也可以专门写一个针对20%的测试用例的,只使用魔法2。

#include<bits/stdc++.h>
using namespace std;
int n;
int p;
int q;
//bool cmp(int a, int b)
//{
//	return a > b;
//}

int main()
{
	cin >> n >> p >> q;
	vector<int> v(n, 0);
	for (int i = 0; i < n; i++)
	{
		cin >> v[i];
	}
	sort(v.rbegin(), v.rend());  // 递减排序
	
	// 求不等式:x/2>根号x    求得:当x>4时,使用/,即使用魔法2时,作用效果没有使用魔法1的好。
	/*
	易错点:上述条件对于实数成立。但是题目中,魔法2还可以向下取整。
	当x<=4时,均为魔法2的效果更加。
	当x = 5时,使用魔法1,变成了2.23; 使用魔法2,变成了2  魔法2更佳
	当x = 6时,使用魔法1,变成了2.4;  使用魔法2,变成了3  魔法1更佳
	当x = 7时,使用魔法1,变成了2.6;  使用魔法2,变成了3  魔法1更佳
	综上所属,x<=5时,使用魔法2;x>5时,使用魔法1
	*/

	// 始终都对第一座最大的山使用魔法
	while (p || q)
	{
		if (v[0] > 5)  // 优先使用魔法1
		{
			if (p > 0)  // 魔法1还可以使用
			{
				v[0] = sqrt(v[0]);
				if (n > 1)
				{
					if (v[0] < v[1]) //使用魔法后比后面的小,需要重新排序
						sort(v.rbegin(), v.rend());
				}
				p--;
			}
			else
			{
				if (q > 0)
				{
					v[0] /= 2;
					if (n > 1)
					{
						if (v[0] < v[1]) //使用魔法后比后面的小,需要重新排序
							sort(v.rbegin(), v.rend());
					}
					q--;
				}
			}
		}
		else // 优先使用魔法2
		{
			if (q > 0)  
			{
				v[0] /= 2;
				if (n > 1)
				{
					if (v[0] < v[1]) //使用魔法后比后面的小,需要重新排序
						sort(v.rbegin(), v.rend());
				}
				q--;
			}
			else
			{
				if (p > 0)  // 魔法1还可以使用
				{
					v[0] = sqrt(v[0]);
					if (n > 1)
					{
						if (v[0] < v[1]) //使用魔法后比后面的小,需要重新排序
							sort(v.rbegin(), v.rend());
					}
					p--;
				}
			}
		}
	}
	long long ans = 0;
	for (int i = 0; i < n; i++)
	{
		ans += v[i];
	}
	cout << ans;
	return 0;
}

8、接龙

知识点:前缀和

        这道题考试的时候没有做,直接输出的用例答案,应该0分。
        本次考试过程中,我很多题目都太渴望求正解,以致于解决速度慢,还不如直接暴力解。
再加上紧张所以编程不能冷静,return 0 又没有写,第一题又粗心了。所以排名二等奖垫底。
        要是解决上述问题,并且把拔河这题写了,就能够拿到省一了!!!
        考试的时候,没有注意到题目说明了所选的每组人编号是连续的。且第2组人编号一定大于第1组人的
        自己考试的时候,把题目想复杂了,以致于这道题没有进行解答。

        解法一:选上所有选手,但题目并未这么要求。
        答案错误。通过一个测试用例,答案拿了9分。折算后为:20*0.09= 1.8

#include<bits/stdc++.h>
using namespace std;
int n;
int Min = 1e9;
int main()
{
    cin >> n;
    vector<int> v(n + 1, 0);
    vector<long long> vs(n + 1, 0);
    for (int i = 1; i <= n; i++)
    {
        cin >> v[i];
        vs[i] = vs[i - 1] + v[i];
    }

    for (int i = 1; i < n; i++)  // 第一组选择前i个人,第一组不可能选所有人,否则第2组没人可选了。
    {
        long long grp1 = vs[i];
        long long grp2 = vs[n] - vs[i];
        long long temp = abs(grp1 - grp2);

        if (temp < Min)
            Min = temp;
    }

    cout << Min << endl;
    return 0;
}

        解法2:使用了4层循环,标记选手范围的l1,r1,l2,r2。非常好理解。注意一下下标,不要写错即可。
        通过3个测试用例。得分27,超时。折算后:20*0.27 = 5.4 

#include<bits/stdc++.h>
using namespace std;
int n;
int Min = 1e9;
int main()
{
    cin >> n;
    vector<int> v(n + 1, 0);
    vector<long long> vs(n + 1, 0);
    for (int i = 1; i <= n; i++)
    {
        cin >> v[i];
        vs[i] = vs[i - 1] + v[i];
    }
   
    for (int l1 = 0; l1 < n; l1++)  // l1位置
    {
        for (int r1 = l1 + 1; r1 < n; r1++)  // r1位置
        {
            long long grp1 = vs[r1] - vs[l1];
            for (int l2 = r1; l2 <= n; l2++)
            {
                for (int r2 = l2 + 1; r2 <= n; r2++)
                {
                    long long grp2 = vs[r2] - vs[l2];
                    long long temp = abs(grp1 - grp2);
                    if (temp < Min)
                        Min = temp;
                }
            }

        }
    }
    cout << Min << endl;
    return 0;
}

 

经验总结:

1、看清楚题目限制条件。

        例如:题目讲到的拔河人数序号一定是递增的——这就导致不会说,有1、2、3、4、5个人,选15一组,24一组。而是一定是选连续的人为1组。这就极大地简化了题目的难度。

2、比赛过程中,不要总是想着上来就求解正解。而是先去尝试纯暴力解法,以节约时间。

        有时候题目纯暴力也需要花很多时间来解决。先做出了纯暴力的解法,留够充足的时间后面再做正解,而且前面的纯暴力会为后续提供思路的。

3、一定一定有了完整的思路、明确这么做是正确的(超时也没关系),才开始编程。

        编程切忌没有思路,或者是有了一丢丢思路就开始编程。这样子的效率极低。而且容易在遇到某个解决不了的问题时,前功尽弃,徒劳而费。

4、学会使用抽象编程。

        例如第一题,将某个变量抽象后,就可以使用某个数值较小的测试用例来检验程序的正确,以保证不因粗心丢分。

5、今天静下心来,没有压力的情况下,拿了40.5分。这个分数应该可以拿省一的。

        感觉自己练的题目也不少,但是自己最终拿到的奖项还是有点弱了。还是自身应试能力不强,编程经验缺乏,水平没有发挥到位。如果有小伙伴想要冲蓝桥杯省一的,一定要提前跟着网上的视频,覆盖知识点后,再进行刷题。题目不管难易,都从暴力解出发,正确每道题目都能拿下一定的分数。

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

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

相关文章

我的 OpenLiteSpeed 从开始到放弃之经历

昨晚下定决心放弃 OpenLiteSpeed 了&#xff0c;从开始到放弃历时七天。总结下来放弃 OpenLiteSpeed 主要是实在不适合明月当前的需要&#xff0c;用起来不是锦上添花而是个累赘了都&#xff0c;今天明月就给大家总结分享一下这次 OpenLiteSpeed 从开始到放弃的经历。 一、Ngin…

为什么大家都说it行业要死了?

年后开始找工作开始还不敢投简历怕准备不充分。怕错过了心仪的公司。 花了2周自己死磕了一下自我介绍&#xff0c;和工作经历。然后信心满满就开始投了&#xff0c;结果发现一堆人打招呼一阵欣喜的。可是一查全是外包公司。于是开始了自我怀疑。难道是我能力不行&#xff1f;难…

反转链表(C语言)———链表经典算法题

题目描述​​​​​​206. 反转链表 - 力扣&#xff08;LeetCode&#xff09;&#xff1a; 答案展示: 迭代&#xff1a; 递归&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* rev…

等保测评技术方案(五)

&#xff08;八&#xff09;漏洞扫描方案 1.参与人员 乙方工程师&#xff1a;谭 然、张 剑等。 范围经过双方确认&#xff0c;此次评估的对象包括&#xff1a; 2.网络设备 IP 地址 设备型号 备注 / / / / / / 以现场测评实际数据为准 3.应用系统 地址 …

Python从0到POC编写-魔法方法

name __name__ 是系统定义的内部函数&#xff0c; 它的作用是识别模块。 通常我们看到这样一句话&#xff1a; if __name__ __main____name__ 的值有两种情况&#xff0c;那么挨个来说下。 如果模块是被直接执行的 &#xff0c;那么 __name__ 的值 为 __main__ 例如&…

GBPC2510-ASEMI工业电源专用GBPC2510

编辑&#xff1a;ll GBPC2510-ASEMI工业电源专用GBPC2510 型号&#xff1a;GBPC2510 品牌&#xff1a;ASEMI 封装&#xff1a;GBPC-4 最大重复峰值反向电压&#xff1a;1000V 最大正向平均整流电流(Vdss)&#xff1a;25A 功率(Pd)&#xff1a;中小功率 芯片个数&#x…

汇聚荣科技:拼多多开店时后期押金可以退吗?

在电商领域&#xff0c;拼多多以其独特的团购模式迅速崛起&#xff0c;吸引了众多商家入驻。对于这些商家而言&#xff0c;了解平台的各项费用政策尤为重要&#xff0c;其中押金的退还问题是大家关注的焦点之一。那么&#xff0c;拼多多开店时后期押金可以退吗?答案是肯定的。…

要不还是别搞Google Play了

​好消息&#xff1a;误导性条款合规了 坏消息: 应用被暂停了&#xff0c;太难玩了 5.13日收到邮件&#xff0c;被告知应用因为应用内体验问题被暂停上架了 邮件大意是由于违反执行流程政策(Violation of Enforcement Process policy)。 这个政策主要是讲Google Play会对账户/…

简述RocketMQ系统架构及其相关概念

一、概述 RocketMQ是一款高性能、高吞吐量的分布式消息队列系统&#xff0c;它采用了分布式架构&#xff0c;支持多生产者和消费者并发读写&#xff0c;具有高可用性、高吞吐量、低延迟等特点。本文将对RocketMQ的系统架构进行详细解析。 二、架构设计 RocketMQ采用了分布式架…

深度学习知识点全面总结

ChatGPT 深度学习是一种使用神经网络来模拟人脑处理数据和创建模式的机器学习方法。下面是深度学习的一些主要知识点的总结&#xff1a; 1. 神经网络基础&#xff1a; - 神经元&#xff1a;基本的计算单元&#xff0c;模拟人脑神经元。 - 激活函数&#xff1a;用于增加神…

通过任意文件读取获取weblogic账号密码

对于weblogic获取到账号密码的前提是有任意文件读取存在&#xff0c;当任意文件读取存在时是可以读取配置文件来对账号密码进行解密。weblogic密码使用AES&#xff08;老版本3DES&#xff09;加密&#xff0c;对称加密可解密&#xff0c;只需要找到用户的密文与加密时的密钥即可…

Docker基础学习

目录 初始docker 安装docker docker架构 配置docker镜像加速器 docker进程相关命令 docker镜像相关命令 docker容器相关命令 docker容器的数据卷 初始docker 我们写代码会接触好几个环境&#xff0c;如开发环境、测试环境、生产环境。代码从开发环境打包到测试环境&am…

中医揿针的注意事项

点击文末领取揿针的视频教程跟直播讲解 关于揿针的注意事项&#xff0c;我们可以从以下几个方面进行探讨&#xff1a; 01操作前准备 1. 确保针具的清洁和无菌状态&#xff0c;以避免感染。 2. 了解患者的身体状况&#xff0c;如是否有特殊疾病或过敏史&#xff0c;以便选择…

如何使用Shortemall自动扫描URL短链接中的隐藏内容

关于Shortemall Shortemall是一款针对URL地址安全与Web内容安全的强大工具&#xff0c;该工具基于纯Python开发&#xff0c;专为Web安全方向设计&#xff0c;可以帮助广大研究人员以自动化的形式扫描URL短链接中的隐藏内容。 Shortemall的全名为ShortEm All&#xff0c;该工具…

前端框架 Vue 主要用来做什么的?

Vue.js 是一个流行的前端框架&#xff0c;主要用于构建交互式的用户界面。它的设计目标是通过简单的 API 提供高效的数据驱动视图层。Vue 具有响应式数据绑定和组件化的特性&#xff0c;使得开发者可以轻松地构建复杂的单页面应用 (SPA) 和动态网页。 1. 数据驱动视图 Vue 的…

百亿补贴为什么用 H5?H5 未来会如何发展?

百亿补贴为什么用 H5&#xff1f;H5 未来会如何发展&#xff1f; 本人有一些分析预测。当然&#xff0c;这些分析预测只是个人观点&#xff0c;如果你有不同的意见&#xff0c;欢迎在评论区讨论交流。 百亿补贴为什么用 H5 我们先看两张图&#xff0c;在 Android 手机开发者…

Spring简介IOCDI

文章目录 Spring简介Spring课程介绍为什么要学学什么怎么学 初识SpringSpring家族Spring发展史 Spring体系结构Spring核心概念目前代码存在的问题核心概念 IOC和DI入门案例IOC入门案例入门案例分析实现步骤实现代码 DI入门案例DI入门案例分析实现步骤实现代码图解演示 Bean的基…

美业收银系统源码-App/iPad/PC管理系统常见问题讲解(1)

博弈美业管理系统源码 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 促销活动 PC管理后台、手机APP、iPad APP、微信小程序 1、平板iPad的评论内容&#xff0c;是从哪里评论的呢&#xff1f; 顾客在接受服务后&#xff0c;可以到…

这些小众软件让你秒变职场高手

工作繁忙&#xff0c;效率不高&#xff1f;别急&#xff0c;今天就要给你种草几款超实用的小众工作软件&#xff0c;让你的办公桌面焕然一新&#xff0c;效率翻倍&#xff01;&#x1f440; 1️⃣《亿可达》 &#x1f5a5;️ 它是一款自动化工具&#xff0c;相当于国内版免费…

Pytorch如何计算网络参数

方法一. 利用pytorch自身 PyTorch是一个流行的深度学习框架&#xff0c;它允许研究人员和开发者快速构建和训练神经网络。计算一个PyTorch网络的参数量通常涉及两个步骤&#xff1a;确定网络中每个层的参数数量&#xff0c;并将它们加起来得到总数。 以下是在PyTorch中计算网…