【No.3】蓝桥杯|知识点|时间复杂度|排列字母|纸张尺寸|平方和|成绩统计|推荐题目

1. 比赛流程、环境

  1. 赛程
    1. 春季:省赛、决赛
    2. 省赛一等奖参加决赛
    3. 比赛时长4小时
  2. 竞赛形式
    1. 个人赛,一人一机,全程机考
    2. 答题过程中无法访问互联网
    3. 不允许携带任何电子、纸质资料
  3. C++组选手机器环境
    1. Dev-cpp 5.4.0 C/C++ API帮助文档
    2. 代码补全
      1. Ctrl+Space

2. 常考和必考知识点

  1. 杂题,不需要算法和数据结构,只需要逻辑、推理的题目,难度可难可易。考察思维能力和编码能力,只能通过大量做题来提高
  2. BFS搜索和DFS搜索,也就是暴力搜索,这时非常基本的算法,是基础中的基础
  3. 动态规划,线性DP,以及一些DP应用,例如状态压缩DP、树形DP等
  4. 简单数学和简单数论
  5. 简单的字符串处理、输入输出,简单图论
  6. 基本算法,例如排序、排列、二分、倍增、差分、贪心
  7. 基本数据结构,队列、栈、链表、二叉树

3.API帮助文档

学会使用API,就可以少记很多函数和工具
无论是在算法学习还是以后的行业工作,看懂API是一个必备的能力

时间复杂度

时间复杂度
给你n个数据
如果只有一个1-n的循环,就是线性阶O(n)
n个数据的二分查找,每次取一半,O(log2n)
如果外层是n循环,内层是二分的,就是O(nlog2n)
如果外层循环是1-n的,内层也是1-n的,就是平方阶O(n2)

常见的时间复杂度量级如下:
常数阶 O ( 1 ) < 对数阶 O ( log ⁡ 2 n ) < 线性阶 O ( n ) < 线性对数阶 O ( n log ⁡ 2 n ) < 平方阶 O ( n 2 ) < 立方阶 O ( n 3 ) < k 次方阶 O ( n k ) < 指数阶 O ( 2 n ) < 阶乘阶 O ( n ! ) < O ( n n ) \begin{array}{} 常数阶O(1)<对数阶O(\log2n)<线性阶O(n)<线性对数阶O(n\log2n) \\ <平方阶O(n^2)<立方阶O(n^3)<k次方阶O(n^k)<指数阶O(2^n) \\ <阶乘阶O(n!)<O(n^n) \end{array} 常数阶O(1)<对数阶O(log2n)<线性阶O(n)<线性对数阶O(nlog2n)<平方阶O(n2)<立方阶O(n3)<k次方阶O(nk)<指数阶O(2n)<阶乘阶O(n!)<O(nn)

![[Pasted image 20240307150603.png]]

怎么判断使用的算法对用测试用例的数据规模能不能过
对于O(n),105,也是小,如果电脑比较好,或者代码冗余度比较低,相当于每次只做一次运算的话,最多能过109,但是是不稳定的状态,1秒之内一定能过108的数据(C++)
线性阶的话,N<=108就可以
O(nlog2n)的话,N<=106甚至105
O(n2)的话,104就很可能过不了了

如何计算时间复杂度
先看有几个循环
两个循环都是1-n,就是O(n2)
题目里是106,带进去,就超了108了,过不了,这个算法就不是这个题目的正解
不会正解的情况下可以通过暴力的方式去做,争取多拿分
时间复杂度就是判断这个算法是不是这个题目的正解

  1. 结果填空
    把答案直接通过网页提交,不要书写多余的内容,每题10分
  2. 程序设计
    每道题目多个测试数据,20%-40%是弱测试数据,其他是强测试数据
    题量大、时间紧张,难题往往不会做或来不及用高效算法,用暴力方法编程得20%-40%的分数
    每题10-25分

题目

1. 排列字母

问题描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可
小蓝要把一个字符串中的字母按其在字母表中的顺序排列。
例如,LANQIAO 排列后为 AAILNOQ.
又如,GOODGOODSTUDYDAYDAYUP 排列后为 AADDDDDGGOOOOPSTUUYYY.
请问对于以下字符串,排列之后字符串是什么?WHERETHEREISAWILLTHEREISAWAY

题解

直接对字符串进行排序即可,使用标准排序函数
C++使用sort标准库函数

代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
	string a = "WHERETHEREISAWILLTHEREISAWAY";
	sort(a.begin(),a.end());
	cout << a;
	return 0;	
}

2.纸张尺寸

问题描述

在 IS0 国际标准中定义了 A0 纸张的大小为 1189mm x841mm,将 A0 纸沿长边对折后为 A1纸,大小为 841mm x594mm,在对折的过程中长度直接取 下整 (实际裁剪时可能有损耗)。将 A1 纸沿长边对折后为 A2 纸,依此类推。
输入纸张的名称,请输出纸张的大小。

输入格式

输入一行包含一个字符串表示纸张的名称,该名称一定是A0、A1、A2、A3、A4、A5、A6、A7、A8、A9 之一。

输出格式

输出两行,每行包含一个整数,依次表示长边和短边的长度,

题解

根据题意维护长边长度a和短边长度b
对于输入A0而言,a=1189,b=841
根据输入的A后面的数字X,循环x次
每次让长边a除以2(向下取整),短边b不变
然后再根据a,b的大小关系进行调整,如果a<b则交换a,b

代码
#include <bits/stdc++.h>
using namespace std;

int main()
{
	char c;
	int x;
	cin >> c >> x; //先输入字符A,再输入纸张类型x
	//维护a,b
	int a = 1189, b = 841;
	while (x--)
	{
		a /= 2;
		if (a < b)
			swap (a, b);
	}
	cout << a << endl;
	cout << b << endl;
	return 0;
}
  • 如果有100W次查询怎么办
    1 0 8 ⋅ 10 = 1 0 9 10^8\cdot10=10^9 10810=109,肯定过不了,爆了
    这时候可以先存起来,建立V和L两个数组,0的时候就是1189和841,1的时候就是841和594,把A0到A9全部存到数组里面,输入x就直接输出对应的数组下标的值
    输入输出是 O ( 1 ) O(1) O(1),整个的时间复杂度是 O ( n ) O(n) O(n)

3. 平方和

问题描述

小明对数位中含有2,0,1,9的数字很感兴趣,在1-40中这样的数包括1,2,9,10至32,39和40,共28个,他们的和是574,平方和是14362
请问,在1到2019中,所有这样的数的平方和是多少?

题解

逐个判断一个数字的每一位

#include <bits/stdc++.h>
using namespace std;

int main()
{
	long long sum = 0;
	for (int i = 1; i <= 2019; i++)
	{
		int t = i;
		while (t)
		{
			if (t%10 == 2 || t%10 == 0 || t%10 == 1 || t%10 == 9 ||)
			{
				sum += i*i;
				break;
			}
			t /= 10;
		}
	}
	cout << sum;
}

4. 成绩统计

题目描述

小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。
如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。
请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整数。

输入描述

输入的第一行包含一个整数 n ( 1 ≤ n ≤ 1 0 4 ) n(1 \le n \le 10^4) n(1n104),表示考试人数。
接下来 n n n 行,每行包含一个0至 100 的整数,表示一个学生的得分。

输出描述

输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分四舍五入保留整数。

补充

4舍6入5留双
3.254 -> 3.25
3.256 -> 3.27
3.2551 -> 3.25
3.2552 -> 3.26

题解
  • 简单模拟题
  • 用cnt1表示及格的人数,cnt2表示优秀的人数,答案即为cnt1/n,cnt2/n,四舍五入后 x 100
  • 百分号别忘记输出
代码
#include <bits/stdc++.h>
using namespace std;

int main()
{
	int n, x, cnt1 = 0, cnt2 = 0;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> x;
		if (x >= 60)
			cnt1++;
		if (x >= 85)
			cnt2++;
	}
	cout << setprecision(0) << fixed << (1.0*cnt1/n*100) << "%\n" << (1.0*cnt2/n*100) << "%\n";
}
  • 用100.0乘,把整型数变成浮点数

推荐题目

题名题名
冰雹数机器人繁殖
k倍区间图形排版
三元组中心问题洁净数
螺旋矩阵倍数问题
递增三元组特别数的和
打印十字图拉马车
打印大X小计算器
饮料换购音节判断
凯撒加密最长递增
次数差螺旋折线
旋转连号区间数
四平方和日期问题
奇怪的数列数位递增的数
反倍数最大距离
积木等腰三角形
缩位求和Fibonacci数列
分糖果
题库 - 蓝桥云课 (lanqiao.cn)
  • 13
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值