
CCF-CSP刷题记录
ZZZWWWFFF_
这个作者很懒,什么都没留下…
展开
-
CCF-CSP 201809-2 买菜
然后对每两个区间,我们可以通过判断筛选出有交集的两个区间,然后用右边界的较小值减去左边界的较大值即得到两个区间的交集,最后叠加即可。题目意思很清晰,给定一定数量的区间,求区间的交集长度之和。由于n的数据范围较小,我们可以暴力枚举所有可能的情况。原创 2023-05-27 17:52:35 · 185 阅读 · 0 评论 -
CCF-CSP 201809-1 卖菜
简单的题目,按照题目意思写即可。原创 2023-05-27 17:48:19 · 142 阅读 · 0 评论 -
CCF-CSP 201812-1 小明上学
该题较为简单,k=0或k=1时直接ans+=t,k=2时,ans+=(t+r)原创 2023-05-27 16:15:51 · 280 阅读 · 0 评论 -
CCF-CSP 201812-2 小明放学
我们使用一个坐标轴来模拟时间的变化,由出发时刻得到的每一个t,我们都可以推算出在坐标轴上的位置,然后再进行时间的变化(即得到当前时刻的时间坐标),再判断还需要多少时间才会变成绿灯即可。第一想法是模拟该过程即可,即根据条件得到到达某一个红绿灯时经过的时间,然后再根据该时间去循环该红绿灯的变化,得到当前时间的灯光状态,再进行计算叠加即可。需要注意的是该题需要用到上一题的条件,即灯光的变化是按照:红绿黄循环变化的。t表示人在起点时,该绿灯剩余的时间。k = 0,t表示行驶路程的时间,直接累加。原创 2023-05-27 16:12:34 · 244 阅读 · 0 评论 -
CCF-CSP 201903-2 二十四点
在遍历完算术表达式时,说明式子中的乘除运算都已经完成,下面只剩下加法(减法已经转换成加法),直到运算符栈为空,最终的结果就是运算数的栈顶元素。最后拿这个数和24来进行比对即可。我们可以利用迭代来模拟计算的过程,即先使用两个数组存储运算符与操作数,然后优先计算乘除,每次都直接将结果放在操作数数组中,但是每次都需要更新当前操作数后面的运算符与操作数。经典表达式求值,立马想到使用堆栈实现。原创 2023-05-26 17:13:41 · 292 阅读 · 0 评论 -
CCF-CSP 201903-1 小中大
该题比较简单,因为所给数据都是排好序的了,对于最大值与最小值我们只需判断第一个元素与最后一个元素的关系即可,而中位数的判断则与n的大小有关,如果n为偶数(下标从1开始),那么中间会存在两个数,此时中位数的计算是该两个数相加后除2,如果n为奇数,那么中位数就是中间那一个数,对于前者而言,我们需要多加一个判断中位数是否为整数,因为此时中位数可能为小数,且题目要求如果是小数需要保留1位小数,反之则直接输出整数,如果floor(mid+0.5)==mid则为整数,反之为小数。原创 2023-05-26 12:06:31 · 436 阅读 · 0 评论 -
CCF-CSP 201909-2 小明种苹果(续)
还是简单的模拟题。原创 2023-05-24 19:41:47 · 153 阅读 · 0 评论 -
CCF-CSP 201909-1 小明种苹果
该题比较简单,简单模拟题目的意思即可。原创 2023-05-24 19:40:36 · 142 阅读 · 0 评论 -
CCF-CSP 201912-1 报数
数据量很小,模拟该报数过程即可。原创 2023-05-24 12:05:39 · 134 阅读 · 0 评论 -
CCF-CSP 201912-2 回收站选址
首先该题不难理解,且数据量较小只有10^3,因此该题是可以容许O(n^2)的,我们考虑使用暴力枚举,即枚举每一个点作为垃圾回收站的中心点,然后我们嵌套循环遍历是否存在该点的上下左右四个点都存在垃圾,同时还可以对该中心点的四个角进行垃圾计数,最后使用hash函数对各个分数的垃圾站数量进行计数即可。原创 2023-05-24 11:58:00 · 173 阅读 · 0 评论 -
CCF-CSP 202006-1 线性分类器
据此,我们取最后一个输入的A点作为标准、最后一个输入的B点作为标准,记录下他们的>0还是原创 2023-05-23 17:03:57 · 226 阅读 · 0 评论 -
CCF-CSP 202006-2 稀疏向量
我们枚举a数组中的每一个index1,再嵌套循环二分查找b数组中的index2,找到就value相乘叠加,反之忽略。使用一个哈希函数存储所有的index与value,如果遇到重复的index就将其value相乘叠加。该题题意比较容易理解,即找到两个数组中index相等的点的value相乘叠加即可。但是这里因为n的值最大可达10^9,哈希数组不可能开那么大,因此该算法只能拿60分。原创 2023-05-23 16:48:16 · 113 阅读 · 0 评论 -
CCF-CSP 202009-2 风险人群筛查
该题算是比较简单的题目,对于每一位市民来说,我们遍历他经过的t个点,如果当前所在点处于高危区域中,那么临时变量(定义为连续在高危区域的点数)计数++,反之清零,然后每次都判断是否该临时变量>=k,定义两个标识变量判断是否是经过高危区域与是否是逗留在高危区域即可。原创 2023-05-22 15:23:57 · 97 阅读 · 0 评论 -
202009-1 称检测点查询
该题比较简单,使用一个结构体保存检测点的编号以及与市民的距离,然后按照题目意思写一个cmp,调用sort,最后数组输出前三个元素即可。tips:对距离可以不用开平方。原创 2023-05-22 18:31:59 · 189 阅读 · 0 评论 -
CCF-CSP 202303-3 LDAP(待更)
该题,我就想奔着40分去的,因为40分只是符合EASY_EXPR即简单的匹配表达式,它只包含一个逻辑符号和两个括号内的简单式子如。因为如果只是满足EASY_EXPR,那么可能的情况会比较少,因此完全可以使用if将所有情况列出来,具体实现如下(不知为何0分)题目非常长,但还没有到完全看不懂的地步,即给你一些匹配表达式,让你输出对应的用户DN即可。数据结构上我选择vector与pair进行存储如下。原创 2023-05-19 17:29:26 · 250 阅读 · 0 评论 -
CCF-CSP 202012-1 期末预测之安全指数
【代码】CCF-CSP 202012-1 期末预测之安全指数。原创 2023-05-18 12:13:11 · 120 阅读 · 0 评论 -
CCF-CSP 202012-2 期末预测之最佳阈值
需要注意的是对于重复出现的阈值我们必须只计算第一个,因为如果对后续重复出现的阈值再计算,会导致计算结果出错,例如上面样例1中出现了两个1,如果对第二个1也进行上述计算会导致阈值为1时预测成功人数为6。想到可以使用前缀和来方便计算及格和不及格的人数,然后提前对数组的阈值进行排序,这样我们可以实现O(1)计算预测成功的人数。该思路比较容易想到,枚举所有可能的阈值,再遍历所有人将预测成功的进行计数,最后不断更新最大值即可。原创 2023-05-18 12:20:49 · 138 阅读 · 0 评论 -
CCF-CSP 202104-1 灰度直方图
简单的一题,理解题意,使用哈希数组即可。原创 2023-05-17 20:59:56 · 155 阅读 · 0 评论 -
CCF-CSP 202104-2 邻域均值
该公式表明领域的定义在于以中心点展开边长为r的正方形,然后我们需要求出该正方形内所有元素之和并且求出其平均值,然后对平均值原创 2023-05-17 20:55:55 · 154 阅读 · 0 评论 -
CCF-CSP 202109-2 非零段划分
该题我第一思路只能想到暴力,即直接枚举所有可能的p,然后根据题意将所有小于p的元素变为0,再计算每次数组的非零段的数量即可。使用数组sub[],sub[i] 表示海平面下降到i时,岛屿数量的变化(此时小于i的数都变为0)每当一个凹谷出现,原本相邻的两个岛屿就被这个凹谷连在一起了,岛屿数减少一个。数组元素sub[i]中存储的就是该元素被替换为0时,划分数变化的差分值。p足够大时,所有的岛都被海水淹没了,只有0个岛屿。每当一个凸峰出现,岛屿数就会多一个;海平面逐渐下降,岛屿数量开始变化。原创 2023-05-17 12:21:01 · 126 阅读 · 0 评论 -
CCF-CSP 202209-1 如此编码
该题主要理解题意,首先a数组已经给你了,c数组是可以自己求出的,再按照提示所给的公式就可以很容易地求出每个b了。原创 2023-05-17 16:21:55 · 271 阅读 · 1 评论 -
CCF-CSP 202109-1 数组推导
仔细理解题意,不难想到对于B数组第i个元素而言,其对应的A数组中元素如果比其前i-1个元素的最大值大,则在计算最小值与最大值时需要加上第i个数组的值,但是由于B数组单调不减,则当第i个元素的值与前i-1个元素的最大值相等时,在计算最小值时直接加上0即可。原创 2023-05-17 12:12:14 · 93 阅读 · 0 评论 -
CCF-CSP 202112-2 序列查询新解
这里我的第一思路还是延续上一题对f的分段,即将f值相同的点作为一段,然后去计算对应段内的g值之和,然后对f值之和与g值求差的绝对值即可,这里需要注意的是可能存在f值原创 2023-05-16 17:08:15 · 204 阅读 · 0 评论 -
CCF-CSP 202112-1 序列查询
这里的A[i]-A[i-1]代表了f值相同的数有多少个,0,1,2,3则代表了对应分段的f值是多少,这里你可以发现上面我多写了一个A[4],这里将A[4]赋值为N即可,因为操作是一样的。以样例1为例:sum(A)=0*(A[1]-A[0])+1*(A[2]-A[1])+2*(A[3]-A[2])+3*(A[4]-A[3])这里的0,1,2,3可以使用一个变量进行++,但是实际上,仔细观察不难发现实际上f值就是对应了A数组的下标。原创 2023-05-16 16:48:30 · 113 阅读 · 0 评论 -
CCF-CSP 202203-2 出行计划
我们考虑逆向思考,即反过来计算每个计划在哪个区间(由t属于[ q+k,q+t+c-1 ]可以得到q属于[ t-k-c+1,t - k ])内做核酸可以完成该计划,同时在该区间的每一个值都+1,这样我们就可以直接利用数组的值得到完成的计划数了,这里我们考虑使用差分实现。题意不难理解,核酸的有效时间计算公式在题目中即可得知即[ q+k,q+k+c-1 ]表明在q时刻做的核酸的有效时间区间,那么我们只需对每个提问q都遍历一遍出行计划,然后对每个出行计划都计算核酸有效区间,对在核酸有效区间内的计划进行计数即可。原创 2023-05-15 16:16:25 · 271 阅读 · 0 评论 -
CCF-CSP 202203-2 出行计划
因此第一思路是想使用一个嵌套循环即外层遍历每一个式子,内层遍历在外层遍历的式子之前出现过的式子,如果外层式子的右值被内层遍历到了,则说明该式子已经初始化过了,反之则未被初始化,进行计数即可,但是这样的话,时间复杂度可能不足以得到满分。需要注意的点是,对于0,题目已经说明该值默认为常量,因此默认为初始化过了,还有要将判断右值是否初始化过放在记录初始化值的前面,避免出现3 3这样的数据导致误判。不难想到,我们可以使用哈希来存储每一个值是否被初始化过了,即如果初始化过了就记录为1,反之为0。原创 2023-05-15 15:10:17 · 111 阅读 · 0 评论 -
CCF-CSP 202206-1 归一化处理
该题比较简单,按照题目的公式进行求解即可。原创 2023-05-14 20:08:36 · 101 阅读 · 0 评论 -
CCF-CSP 202206-2 寻宝!大冒险!
首先,上面的思路选择在一开始就不正确,我们不应该也不必要为绿化图建立数组,因为遍历左下角的点只需遍历值为1的点即可,而这在输入中已经知道了,因此只需O(n)遍历即可,此外,我们还要保证选择的点作为左下角之后能否在右上角容纳下宝藏图,如果不能,则continue,反之则需要对两张图进行匹配,这里匹配两个数组对应的点是否相等,我们只需判断绿化图中的点是否在index数组中,如果在就相当于判断藏宝图中的点是否为1即可,不在index数组中则同理判断藏宝图中的点是否为0即可。后面仔细思考后的思路更清晰一些。原创 2023-05-14 20:03:41 · 455 阅读 · 0 评论 -
202209-2 CCF 何以包邮?
需要强调的是,这里在DFS里面的for循环一定要从t开始,否则暴力都拿不了多少分,因为这样既可以保证选择不会重叠又可以保证多余的遍历。对背包问题比较熟悉的同学可能一眼就看出类背包了,我们知道经典的背包问题是在有限的空间内,选择一些物品使得物品的总价值最大。而该题 是在满足包邮条件下(可以看作 选择的物品总重量>=x 的条件下),选择最小的价值,同时该题的重量与价值是一样的。首先,题目已经可以明确的第一思路是使用暴力枚举所有的选择情况,然后得到包邮情况下的最小值即可。思路2:转换为01背包问题。原创 2023-05-14 16:04:36 · 174 阅读 · 0 评论 -
CCF- CSP 202212-2训练计划
对于最晚开始时间,必须明确一点:最后一个科目完成时,恰好是最后一天,才能满足最晚开始时间的要求,所以,从最后一个项目往前开始遍历(题目中指出:每项科目最多只依赖一项别的科目,且满足依赖科目的编号小于自己),如果当前项目没有后继项目,则最晚开始时间只需要保证该科目可以按时完成,即last[i] = n-t[i]+1;如果当前科目有依赖,则需要对依赖项目的最晚开始时间进行更新,即依赖项目的最晚开始时间需要包含后继节点的训练时间,可以结合下图理解。该题我对“最晚开始时间”没有理解到位,因此只拿到了70分。原创 2023-05-13 17:05:54 · 311 阅读 · 0 评论 -
CCF- CSP 202212-1现值计算
该题较为简单,理解题意即可写出代码,我们按照公式。将所有的钱都转换为当前的价值即可。原创 2023-05-12 17:19:11 · 110 阅读 · 0 评论 -
CCF-CSP 202303-2 垦田计划
因此我们需要尝试优化,仔细观察不难发现可以优化的点就在于“枚举希望耗时”,我们可以将线性枚举耗时i,优化为二分枚举耗时i,这样时间复杂度就变为nlogn了即可满分。第一思路是枚举,即枚举所有可能的最小耗时,计算每个耗时的所需资源,如果资源不够了,输出当前最小耗时+1即可。当然这里使用了嵌套for循环,时间复杂度为O(n^2),因此只能拿到70分。该思路单看代码可能难以理解,建议自己调试一遍。原创 2023-05-11 12:06:26 · 131 阅读 · 0 评论 -
CCF CSP 202303-1 田地丈量
思路二,仔细观察我们其实不难发现我们只需将矩形与原矩形没有交集的地方切掉,那么矩形的面积就是重叠的面积了,但是这里我们需要先将不可能有交集的情况列出来并且排除,这里也不难得到,就是当矩形的左边界大于等于原矩形的右边界、矩形的上边界小于等于原矩形的下边界、矩形的右边界小于等于原矩形的左边界、矩形的下边界大于等于原矩形的上边界(这里的原矩形即(0,0)与(a,b)形成的矩形),将这四种情况排除,剩下的情况就都是有交集的情况了,再将没有交集的地方切割即可。原创 2023-05-10 21:20:54 · 544 阅读 · 1 评论 -
CCFCSP 201409-2 画图
此外,我们实际上可以很容易计算得到矩形的大小,那么我们将所有的矩形面积相加再减去重叠的部分即可,这里也使用一个标记数组进行标记,只不过我们遇到已经标记过的格子就减去1即可。思路上很容易想到即使用一个标记数组对上过色的模块进行标记,最后遍历该数组得到被标记的模块数即可。原创 2023-05-10 20:05:46 · 121 阅读 · 0 评论 -
CCF CSP——相邻对数(201409-1)
该题思路较多且都比较容易想到,最容易想到的就是暴力枚举所有数可能组成的数对,然后将其中数对大小相减为1或-1的进行计数即可。此外,我们也可以采用先对输入的数据排序后,将前后两个数相差为1的数对计数即可。另外也可以使用哈希进行存储后对前后存在数的数对进行计数即可。原创 2023-05-10 19:56:19 · 122 阅读 · 0 评论 -
CCF-CSP 2014-03-2 窗口(模拟)
此外,参考了他人的博客,我们还可以直接将每个窗口的顺序定义在结构体中,然后可以通过内置函数sort进行降序排序,从而实现窗口的排序。这里我定义了一个结构体数组来存储每一个窗口的范围以及编号(因为需要输出窗口原来的编号)此外我们将这个结构体数组的下标从小到大看作每一个窗口从底部向顶部增长。该题是一道纯粹的模拟题,主要在于看懂题意后使用程序模拟出来即可。原创 2023-05-07 17:21:16 · 113 阅读 · 0 评论 -
CCFCSP 201403-1相反数(枚举/哈希)
思路较为容易想到,由于该题数据量较小,可以使用暴力枚举每一对可能的数的情况,再判断两个数是否是相反数同时计数即可。 2.遍历哈希表,如果发现某数的相反数存在,计数器res++。,将数字插入哈希表中,并更新相关的布尔值为true。此外还可以使用哈希的做法。 3.最后res要除以二。原创 2023-05-07 17:09:56 · 132 阅读 · 0 评论 -
CCF-CSP 2013-12-3 最大的矩形(暴力枚举)
可以在第一重循环枚举i,表示从第i个矩形开始往后,然后第二重循环枚举j,表示从第i个矩形往后到第j个矩形所组成的面积,此时我们已经确定了组成的矩形的底是多大即j-i+1(如果下标从1开始),那么我们再确定高即可,根据题意不难得知,高是由我们选取的矩形区间[ i , j ]之间的矩形的最小高决定的,比如我们选取了第2个矩形到第5个矩形,那么高就是由最小矩形第2个矩形决定的,因此我们再设置第三重循环枚举得到矩形区间[ i , j ]的最小高。这里我们想到尝试空间换时间,即使用一个数组来存储矩形区间的最小高。原创 2023-04-25 17:11:29 · 456 阅读 · 0 评论 -
CCF-CSP 2013-12-2 ISBN号码(模拟)
该题比较简单,根据题意正确理解后即可写出代码,需要强调注意的是当识别码为X的时候的输出。原创 2023-04-25 16:51:09 · 117 阅读 · 0 评论 -
CCF-CSP 2013-12-1 出现次数最多的数(哈希)
该题比较简单,使用一个数组记录下每一个数出现的次数,其中下标作为出现的数即可,然后遍历数组求最大值即可。原创 2023-04-25 16:44:39 · 147 阅读 · 0 评论