Day 1

T1 矩阵转置

题意:

这道题描述的是矩阵A中的某一个数字,在矩阵B中(和矩阵A的方向转了一下),然后通过这个点输出矩阵B

思路:

将A[i][j]作为一个根据点将它周围的数字通过枚举一个个输入进去,转换完后在输出出来。

知识点:

基本没什么新知识,纯语法。

T2 chess960

题意:

输入一个数,根据题目所说的条件判断数是否满足条件。

思路:

根据题目所说的条件,并运用循环重复判断是否满足条件,满足条件后存入变量或数组中,最后输出结果。

知识点:

也都是语法。

T3 暑假打工

题意:

你在M天的时间内,你最多能赚多少的的钱

思路:

使用vector数组按天数分组存储报酬,使用贪心策略‌,每天选择当前可获得的最高报酬的工作,时间也要少,不要金额高,时间更高。最后输出结果。

知识点:

稍微高级一点的priority_queue(队列)和动态数组,还有一点点贪心算法和优先队列。

T4 我喜欢因式分解

题意:

输入整数X,寻找满足的整数对(A,B)‌。而且A5A^5-B5B^5=X。

思路:‌

由于A和B的范围有限,采用双重循环遍历所有可能的组合‌‌,找到第一个满足条件的数立即返回,跳出循环,降低时间复杂度。

知识点:

基本上也是语法,只是加了一点数学思维,要多动脑。

Day 2

T1 缺失的数字

题意:

输入一个数N和它相对应的数字(连续的,但要少一个),有N+1个连续的整数但现在少了一个,需要我们求那个缺失的数字。

思路:

先将数排好序,再将输入的数的和求出来,算出本来的和,再将两个数相减,求出答案。

知识点:

纯语法,但数学的功底要好。

T2 不及格

题意:

这道题描述了有N名学生,每个学生都有一个得分。如果学生的得分低于分数P,那么这个学生就被视为不及格,无法获得学分。题目要求我们计算出不及格的学生有多少人。

思路:

首先,我们需要读取三个数据,分别是学生总数N、分数线P和每个学生的得分a[i]。然后,我们逐一检查每个学生的得分,看看是否低于及格线P。每当发现一个学生的得分低于P,我们就把这个学生计入不及格的人数中。最后,我们输出不及格学生的总人数。

知识点:

也是语法,直接循环判断。

T3 集会

题意:

有N个人住在一条数轴上,每个人有一个固定的坐标。要找一个整数坐标P作为集会地点,使得所有人到P点的距离的平方和最小。这个平方和就是他们参加集会所需花费的总体力点数。

思路:

因为每个人的坐标在1到100之间,所以集会地点P也只需考虑1到100之间的整数。对于每个可能的P值,计算所有人到P点的距离的平方,然后将这些平方值相加,得到该P值下的总体力花费。‌比较所有P值下的总体力花费,找到其中的最小值。

知识点:

数学功底要好,要知道平方差公式,其他除了vector数组,都是语法。

T4 统计区间

题意:

这道题目要求我们找出一个整数序列中所有和为K的连续子序列的数量。简单来说,就是给定一组数字和一个目标值K,我们需要计算有多少段连续的数字加起来正好等于K。

思路:

首先,计算序列A的前缀和数组,每个位置到序列开头的元素和。然后,遍历前缀和组,对于每个位置,检查是否存在一个之前的位置,使得这两个位置的前缀和之差等于K。如果找到这的位置对,说明它们之间的子序列和就是K。最后,统计所有满足条件的子序列数量,并输出结果。

知识点:

图的遍历,这个比较难,要多复习,还要用前缀和数组进行优化。

T5 旅行

题意:

有N个城市和M条单向道路,要计算有多少对城市可以作为旅行的起点和终点,且起点和终点顺序不同要视为不同对。‌

思路:

首先‌,我们计算出所有可能的城市对数量,即N乘以N,因为每个城市都可以是起点或终点。然后‌,我们需要考虑单向道路的限制。由于道路是单向的,有些城市对之间可能无法直接到达。这里,我们可以构建一个图,用节点表示城市,用边表示道路,然后进行图的遍历,找出所有可以相互到达的城市对。最后‌,我们统计出所有可以相互到达的城市对数量,并输出这个结果。

知识点:

这道题也需要用到图,也要将图进行遍历。

Day 3

T1 最小贪吃量

题意:

给定N道菜,每道菜有甜度A[i]和咸度B[i]。小k可以任意排列这些菜并按顺序品尝,但一旦已吃菜品的总甜度超过X或总咸度超过Y,他就会停止进食。目标是求出小k最终吃下的最少可能菜数。

思路:

首先读取输入的N、X、Y以及每道菜的甜度A[i]和咸度B[i]。为了最小化吃下的菜数,可以先对菜品按甜度A[i]从小到大排序,若甜度相同则按咸度B[i]从小到大排序。从甜度最小的菜品开始尝试加入,同时记录当前的总甜度和总咸度。一旦总甜度超过X或总咸度超过Y,停止加入菜品,并记录当前已加入的菜品数量。由于菜品是按甜度排序后依次加入的,因此得到的菜品数量即为最少可能菜数。

知识点:

你只要会排序,暴力枚举和求最小值。

T2 三连纯一数

题意:

本题要求找出第N小的整数,该整数可以恰好表示为三个纯一数之和。

思路:

首先生成一系列纯一数,如1, 11, 111, 1111等,直到满足题目需求为止。使用三重循环遍历所有可能的三个纯一数组合,计算它们的和。对于每个组合的和,使用一个集合或字典来记录这些和出现的次数,以便后续排序。将所有和进行排序,找到第N小的符合条件的整数并输出。

知识点:

要会循环,数组和排序。

T3 倒立数对

题意:

给定一个正整数𝑁需要找出所有满足以下条件的正整数对(𝐴,𝐵)的数量,其中𝐴和𝐵都不大于𝑁,𝐴最后一位数字等于𝐵 的第一位数字。𝐴的第一位数字等于𝐵的最后一位数字。

思路:

从1到𝑁遍历所有可能的𝐴和𝐵的值。对于每个𝐴,提取其最后一位数字;对每个𝐵,提取其第一位数字。检查𝐴的最后一位数字是否等于𝐵的第一位数字,同时检查𝐴的第一位数字是否等于𝐵的最后一位数字。如果一对(𝐴,𝐵)满足上述两个条件,则计数加一。遍历结束后,输出满足条件的整数对的总数。

知识点:

基本上是纯语法,你稍微再扩展一些就可以了。

T4 池塘

题意:

思路:

知识点:

T5 区间合并

题意:

思路:

知识点:

Day 4

前缀和:

其实前缀和就是在时间复杂度过高时进行优化的代码,基本上就是要记住前缀和的大概思路,然后进行头脑风暴,想出公式,最后把代码进行优化。

二分:

二分查找算法,也叫做折半查找法,是一种用在有序数组中查找特定元素的高效搜索方法。二分查找的思想是:通过确定目标元素所在的区间范围,反复将查找范围减半,直到找到元素或找不到该元素为止。如:100里找数,找51,你应该找中点,50,大了找75,不断找剩下数的一半。有时候除不整,可以向下取整或向下取整。

Day 5

T1 单次交换

题意:

思路:

知识点:

T2 开关

题意:

思路:

知识点:

T3 不可表示的数

题意:

思路:

知识点:

T4 幸运数

题意:

思路:

知识点:

T5 逻辑表达式

题意:

思路:

知识点:

Day 6~7

深度优先搜索算法:

英文缩写为DFS,是一种用于搜索树或图结构的算法。深度优先搜索算法采用了回溯办法,从起始节点开始,沿着一条路径尽可能深入地访问节点,直到无法继续前进时为止,然后回溯到上一个未访问的节点,继续深入搜索,直到完成整个搜索过程。通俗来讲就是一条路走到黑,真的走到尽头了再往后退,直到全部都走完,返回过程就是回溯算法。在深度优先遍历的过程中,我们需要将当前遍历节点的相邻节点暂时存储起来,以便于在回退的时候可以继续访问它们。由于DFS太复杂了,时间复杂度也就很高了,往往写代码时需要剪枝。

广度优先搜索算法:

英文缩写为 BFS,又译作宽度优先搜索,横向优先搜索,是一种用于搜索树或图结构的算法。广度优先搜索算法从起始节点开始,逐层扩展,先访问离起始节点最近的节点,后访问离起始节点稍远的节点。以此类推,直到完成整个搜索过程。也可以说是逐层遍历,它像DFS一样很复杂,但是感觉比DFS又简单很多,DFS能做的题基本上BFS也能做,我们也应该先想到用BFS,因为它时间复杂度很低。由于遍历到的节点顺序符合「先进先出」的特点,所以广度优先搜索可以通过「队列」(quene)来实现,你可以把它想象成人在排队。

  1. 广度优先搜索算法步骤

Day 8

T1 一千万零一只斑点狗

题意:

思路:

知识点:

T2 金字塔

题意:

思路:

知识点:

T3 走迷宫

题意:

思路:

知识点:

T4 划分问题

题意:

思路:

知识点:

T5 序列查询

题意:

思路:

知识点: