(博主只是一个蒟蒻,图论和高级数据结构都不会,模拟题也不会,而这恰好是ccf考得最多的。。。所以考前就做好了不过的准备,没想到最后250飘过2333。最后申明,ccf的正经题解在这里你是看不到的)
第一题
向来是签到题,大意是饮料十块钱一瓶,买五瓶送两瓶,买三瓶送一瓶,问n元钱最多能买到多少瓶。简单分析即可知买五送二优于买三送一优于其他购买方式。先将n分解,n=50*s1+30*s2+10*s3,然后只需先考虑s1再考虑s2最后考虑s3就行,就不贴代码了。
第二题
通常也是签到题,这次的第二题也差不太多,可能比前几次略难一点,但是事实上也是直接按时间暴力就能过的小模拟。题意就不多说了,题目还没放出来呢。说说我的心路历程吧:第一眼,按时间暴力啊!写到一半,要不找一个快点的方法?然后。。。限于才疏学浅,钻了牛角尖,导致最后的代码连自己造的数据都过不了,加上时间不多,连暴力都没写就去开第四题了。。。(第二题只拿了20分的咸鱼一条QAQ)
第三题
没看,从第二题就能看出,本人代码能力十分差劲,脑子也有坑,因此向来是不敢挑战模拟题的。
第四题
给出一个有向图,n个点,m条边。对于图中的i和j两个点,如果存在一条路径,使得i可以到j或者j可以到i,就说明这两个点有关系,问图中与所有点都有关系的点的个数。其中n<=1000,m<=10000。
我通常是不写图论题的,这块也不是我负责的,但是两个队友已经提前交卷走人了,剩下啥都不会的我在那里抓耳挠腮,最后索性破罐子破摔——干脆遍历n个点,每个点求一个最短路(建图时让每条边长为1就行了),只要dis[i][j]和dis[j][i]中有一个不是INF就说明二者有关系。最短路用的dij+优先队列板子,时间复杂度mlogm,所以总时间复杂度是(nmlogm),起初我以为不能过全部数据,花了几十分钟敲完并过了样例和自己造的数据,想着骗个60分也不错。(很惭愧,当时连1s能过什么规模的算法都不知道。。。所以最后知道自己第四题满分的时候我是惊呆了的!)
第五题
给出n个数字和m次询问,询问分为1 l r v(表示将区间[l,r]中的所有v的倍数除以v),2 l r(表示查询[l,r]的区间和);
乍一看,区间修改,区间查询,线段树?恰好带了线段树区间修改的板子。然后仔细一想,却发现带lazy标记的线段树并不可做,因为修改的是区间内部分点,而非整个区间,因此只能单点修改。(当然肯定有办法优化,但是咸鱼我不会啊QwQ)最后为了骗分自己敲了个单点修改区间查询的线段树(事实上树状数组写起来要短不少),成功骗到了30分。
第二天成绩出来:
第一题 100 第二题 20 第三题 0 第四题 100 第五题 30 总分 250
总之250万岁hhh