![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
CCF
AivenZ
stay hungry stay foolish
展开
-
CCF-CSP-202012-2-期末预测之最佳阈值-python100分
方法1:暴力,把每个阈值和m个条目进行判断,计数。只能过70%的用例方法2:统计一个分数预测准确的数量并不需要一个个判断的嘛,小于该分数的,结果要是0才算正确;大于等于该分数的,结果要是1才算正确。所以可先用字典统计每个阈值挂了的(0)和过了的(1)数量,然后按分数大小排序(这一步已经去重复了)。计算阈值正确数的时候,从该阈值开始,往低分处走统计0的数量,往高分处走统计1的数量,最后加一起。每算一个阈值的正确率,就要往高低走统计,这样复杂度也是O(n^2),和暴力没区别。不过稍微改一下,就马上变O(原创 2021-01-10 22:02:15 · 1411 阅读 · 5 评论 -
CCF-CSP-202012-1-期末预测之安全指数
按题目公式算出来n, tot = int(input()), 0for i in range(n): w, score = map(int, input().split()) tot += w * scoreprint(max(0, tot))原创 2021-01-10 21:06:28 · 643 阅读 · 0 评论 -
CCF-CSP-202006-2-稀疏向量-100
内积意思指两个向量每个维度相乘之和。两维度都非零,相乘才有意义。于是找两个向量都非零的维度相乘相加即可。第一个向量u的键值对存入映射表,第二个向量的键值对就从映射表里找存在的idx,相乘,相加。下面代码都为60分,超时。我改成只读数据的代码,提交后也用2秒多了,怪不得超时。java代码import java.util.HashMap;import java.util.Scanner;public class Main { public static void main(String[]原创 2020-08-05 21:05:14 · 845 阅读 · 5 评论 -
CCF-CSP-202006-1-线性分类器
把点代进公式,求出大于0为一类,小于0为一类,各自存进集合中。最后各自求两个集合的种类数,均为1类的说明两类点被完美分开。python100代码n, m = map(int, input().split())points = []for i in range(n): points.append(input().split())for i in range(m): b, wx, wy = map(int, input().split()) up, down = set(),原创 2020-08-05 20:07:11 · 485 阅读 · 0 评论 -
CCF-201912-3-化学方程式
题目好懂,但是坑多题解:这里用python的字典处理,元素为键,数量为值。所以思路就很清晰,判断等式两边的字典是否相等(很方便,用“==”就可以了)。先分开等式为左右两个表达式,用get_dict()得到各自的字典。再以加号分隔出一个个化学式,用get_part_dict()得到每个部分的字典。重点:1.嵌套,递归就好了;2.还有项会存在同级下有多个括号对的情况,比如Na(OH)(CO3)...原创 2020-03-05 20:14:02 · 600 阅读 · 0 评论 -
CCF-201912-2-回收站选址
有n处垃圾,在这n处建回收厂,且上下左右都有垃圾才能被选上。为选上的地点评分,4个斜角,一个斜角有垃圾加一分。一共5种分值:0,1,2,3,4。最后得到一个分值,对应分值的个数加一,最后输出每个分值各有多少个选址。流程:遍历每个地点,评分s1,能选作回收站的接着评分s2。提示:2种方向:dires1 - 上下左右;dires2 - 4个斜角2个评分:s1 - 上下左右,4分才能被选;s...原创 2020-03-04 23:34:23 · 288 阅读 · 0 评论 -
CCF-201912-1-报数
1234567*891011121314*151617*18…1234123*4123412*341*2…如上1234指代甲乙丙丁大小为4的数组 cnts 用来记录甲乙丙丁跳过的次数,题目n为总共可以报的次数(不包括跳过的数,因为跳过了,没报出来),每报一次 n-1。死循环报数,遇到7的倍数和带7...原创 2020-03-04 23:18:11 · 448 阅读 · 0 评论 -
CCF-201909-4-推荐系统
这题也是模拟题,近两次的第四题竟然都是模拟题。题目大意:开始有m类商品,每类n个,然后进行增,删,查操作,输出查操作的结果。思路:因为相同类的不同商品之间的编号不相同,相同编号的商品类不相同。所以每个商品的标号(类号+编号)一定唯一的。我用映射表(python叫字典)来存数据,格式——标号:分值。1.增操作,直接往映射表里面加条目2.删操作,删除映射表里的对应条目3.查操作,把数据都...原创 2019-12-13 10:15:18 · 403 阅读 · 0 评论 -
CCF-201909-3-字符画
这题大家有冷静看过的话,发现其实并不难。。考试和练习真的心态不一样啊。。。题目大意:把图片中的像素压缩成一些块,这个块的像素就是这些像素的平均值,然后再在控制台输入命令。还要把命令的每个字符转成ASCII码,16进制的。# 题目大意:把图片压缩模糊后,再在控制台输出命令# 题目使用空格作为字符作字符画,因为空格是透明的# 所以其实只要改变终端背景色就ok了,就是48;2那个# 所以38...原创 2019-12-10 01:20:14 · 662 阅读 · 0 评论 -
CCF-201909-2-小明种苹果(续)
小模拟注意:连续三棵树掉落为一组,E是这种情况的组数。注意树是围成一圈的,所以E的最大值为树的棵数(全部都有掉落)。找相连三棵掉落的办法很简单,从一棵树开始看后面两棵树是不是也掉落,同时注意树的下标要取余。n = int(input())total, E = 0, 0if_drop = [False] * nfor i in range(n): ip = [int(e) for...原创 2019-12-09 21:00:44 · 212 阅读 · 0 评论 -
CCF-201909-1-小明种苹果
n, m = map(int, input().split())t, k, p = 0, 0, 0for i in range(n): ip = [int(e) for e in input().split()] total = ip[0] dropnum = abs(sum(ip[1:])) if dropnum > p: p = dro...原创 2019-12-09 20:49:15 · 197 阅读 · 0 评论 -
CCF-201403-4-无线网络
题目大意:在这一堆路由器中找出第一个路由器到第二个路由器经过的最少中转路由器数,最少次数问题。用广搜bfs,一层层搜,哪层搜到就返回层数 - 1,每层走的时候计搜到的新增路由器数,当经过的新增路由器数小于等于k时才入列。注意:建立邻接表时,计算结点两两之间的距离,小于等于r就建立这两个结点的连接。bfs的逻辑是一层层的进行,每层的里面的元素是一个列表 [ node 结点,count 遍历...原创 2018-11-30 16:21:45 · 314 阅读 · 1 评论 -
CCF-201409-4-最优配餐
这题真的拓展了我对BFS的认识,bfs还可以多个源点同时开始bfs,以前一直都是一个源点开始bfs,这题因为有多家店,找最短路径,就必须要一起来bfs,如果分开一间间店bfs的话,最后还要比较那家店最短。时间复杂度会爆炸。ccf里面同样的思路,只有c++的代码才能100,java和python代码都超时,分别只有80和70分。我同学的java代码以前还能拿90,现在提交上去只有80,java和c...原创 2018-12-01 11:19:55 · 564 阅读 · 0 评论 -
CCF-201712-4-行车路线
这题考最短路径,最短路径的变种套用dijkstra模板,要改变的是 更新costs那里的判断。重点:算到达某个结点的疲劳值用一个数组(sum_small)存对应下标结点之前经过的连续小路之和再用一个数组(sum_big)存对应下标结点之前的大路疲劳值之和如果到达一个结点经过的是大路,只要在父结点的cost基础上加这条边的疲劳值就得到这条路径的cost。 cost = costs[min...原创 2018-12-01 16:24:40 · 827 阅读 · 3 评论 -
CCF-CSP-历年试题目录
试题编号试题名称201809-1卖菜 100201809-2买菜 100201809-3元素选择器 100201809-4[再卖菜]201809-5[线性递推式]201803-1跳一跳 100201803-2碰撞的小球 100201803-3[URL映射 100]201803-4[棋局评估]201803-5...原创 2018-12-15 00:35:43 · 985 阅读 · 1 评论 -
CCF-201903-4-消息传递接口
这次第四题竟然是模拟题。。不知道还有没有图论的解法。模拟进程的收发,这里我也才拿了60分,答案错误。讲一下大概思路:每个进程有收发的缓存。不断循环进程,去每个进程的首操作,看对面进程的缓存有没有匹配,有就清空对面的缓存。没有就在当前进程的缓存里加这个操作。然后每次加缓存,总缓存数加一,每次匹配就会减一。最后,总缓存数为0,说明全部匹配完,输出0,非0说明,没有匹配完,死锁输出1。注意每次访问...原创 2019-04-16 22:17:47 · 1740 阅读 · 7 评论 -
CCF-201709-4-通信网络
这道题爆搜,每个结点作为起点开始搜,每搜到一个,就标记一个。用一个邻接矩阵knows来标记得到联系的点。比如从点1开始搜,搜到4,那就 knows[1][4] = knows[4][1] = 1。结点数不多,所以可以爆搜,但是没想到同样的思路java可以100,python就只有75,真的玄学。。。平时用python做题,内存,运行时间都比java好的。Java代码import java.u...原创 2018-12-02 17:04:05 · 384 阅读 · 2 评论 -
CCF-201503-4-网络延时
这题我一开始想法是暴搜。从每个边缘结点出发,都进行一次bfs,找出最大步数。但是肯定过不了全部用例,暴力搜索只拿了70。后来看别人的文章,才知道是考树的直径。具体介绍在这个链接中ccf网络延时及树的直径详解 作者:乐乐敲代码具体结论是:从任意一点出发搜出最远的点,然后在从这个最远点开始搜,就可以搜到另一个最长路的端点,即用两遍广搜就可以找出树的最长路。我的理解:最长路的结点肯定在边缘嘛,...原创 2018-12-02 11:52:29 · 357 阅读 · 0 评论 -
CCF-201412-3-集合竞价
这道题不算是模拟,算数学题吧。这道题也是要细心。思路定的开盘价要使得买单和卖单的成交量最大就是尽可能多的把买单和买单进行匹配。成交量就是买单数和卖单数的最小值。如图从buy买价开始找开盘价,每一个开盘价,从开盘价往上求出总买单数,往下找出总卖单数,找买卖单最小值,更新最大卖单数。注意为什么要从买单开始找开盘价,而不是暴力的每个价格试?可以证明开盘价永远在买单中。简单的举个栗子,...原创 2018-11-18 01:28:39 · 712 阅读 · 1 评论 -
CCF-201604-3-路径解析
这题一开始我是看不懂的,不过慢慢看懂后,发现原来很简单。题目叫我们正规化每个路径。其实就是模拟路径的走向,最后生成绝对路径。题目输入的当前目录其实对相对路径才有用。具体思路先判断输入的路径是不是绝对路径,是绝对路径就得当前目录改为根目录。把输入路径根据‘/’分号分成列表从左到右遍历这个列表。1)遇到是空字符和‘.’就忽略(这就可以解决重复分号和单点的情况)2)遇到两个点,就返回上一级,...原创 2018-11-17 19:55:11 · 256 阅读 · 0 评论 -
CCF-201609-4-交通规划
题目意思是:求最短路径的同时还要保证这些路径的总权值最小在两条总权值相等的路径中,经过结点最多的那个最好。你想想,如果我能从原来已有的结点上再加一条到达木雕。是不是好过从上一个结点再拉一条呢。代码只要在原来的dijkstra算法上改一下就好了。新加一个存储到父结点的边权值,在每次更新最短路径的时候,看新的父结点的边值是否小于以前的,是就更改父结点和父结点边的权值。python代码:def ...原创 2018-11-22 17:59:54 · 405 阅读 · 2 评论 -
CCF-201412-4-最优灌溉
这题其实不难,考最小生成树,这里我用prim算法求最小生成树。一开始的代码运行超时才70,后来改进后就100了。这题考基本功,mst算法刚学,算法是根据prim想法自己来实现,就来这里试一下,果然学的不够深,后来看别人的prim就改进了。其实这里还可以用优先队列改进。python代码def mst(graph): total_weight = 0 t = [0] sel...原创 2018-11-18 21:50:52 · 451 阅读 · 0 评论 -
真香!我觉得我下一次CCF可能要报python语言。
论python写算法题的优缺列表对于列表的操作,python很方便,而java要用数组或者Arraylist或LinkedList等集合库里面的东西。python还有列表解析等等黑魔法,写起来非常方便。python列表就是一个对象,可以直接以[1,2,3…]这样的方式赋值给任何变量,而java要声明一遍。java的包名又贼几把长。写一大堆东西。字典python的字典也非常方便,对于很多数据...原创 2018-11-16 00:50:06 · 4382 阅读 · 21 评论 -
CCF-201512-3-画图
这题搞字符艺术,模拟平时画图那样画线然后填充颜色。垂直线与水平线相交点变‘+’加号,填充用广搜,用深搜也行,不过最后一个用例会爆栈,导致运行出错。广搜我自己测试100*100的矩阵,然后广搜100遍都很快,不用一秒出结果,但是提交上去只有90,最后一个用例运行超时。。。很迷。python代码def draw_line(x1, y1, x2, y2, matrix): xlen = le...原创 2018-11-16 00:22:24 · 386 阅读 · 0 评论 -
CCF-201812-1-小明上学
题目大意:小明上学,遇到路口通过,会有一段时间 t 秒;遇到交通灯,当时的交通灯剩 t 秒,红灯黄灯停,绿灯行。最后要我们算小明上学一共花了多少时间。思路:小明走一步算一步,遇到路口(0),总时间加 t,遇到红灯总时间加t,遇到黄灯总时间加 t 再加 红灯时长(r),遇到绿灯通过,不加时间。r, y, g = map(int, input().split())n = int(input(...原创 2019-01-12 13:55:56 · 941 阅读 · 0 评论 -
CCF-201812-2-小明放学
题目大意:这题和第一题的区别在于,小明事先得知路况(路口通过时间和交通灯数据),走之前预测估算走多少时间,不再是第一题那样走多少记多少。思路:由于没有亲自去走,所以需要模拟人去走,得到走的总时间,遇到交通灯的时候,通过总时间和交通灯一开始的情况推算出现在交通灯情况,然后就可以像第一题那样做了。细节:1.推算交通灯情况的时候注意题目交通灯的标号(1-红,2-黄,3-绿),然后红绿灯运行顺序...原创 2019-01-12 14:33:24 · 1835 阅读 · 0 评论 -
CCF-201812-4-数据中心
题目大意:题目要我们找出最优树结构(传输时间最短的生成树),输出最优树结构的传输时间首先来讲讲树结构的传输时间如下图,这棵树有4层(深度为4),找出每层的最大边T(h),然后在这些最大边里面再找最大边T(max),说到底就是这棵树的最大边嘛。。。。。。。。。。思路:那么最优树结构(传输时间最短的生成树)怎么找呢?答案:就是最小生成树为什么?最小生成树的边集已经就是这个图里能组成生...原创 2019-01-12 15:59:53 · 3015 阅读 · 4 评论 -
CCF-201312-1-出现次数最多的数
时间限制:1.0s内存限制:256.0MB问题描述 给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。输入格式 输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。 输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。...原创 2018-08-21 11:06:20 · 187 阅读 · 0 评论 -
CCF-201812-3-CIDR合并
这题看起来很可怕,考证的时候望而却步。过了好久,直到现在才做题。仔细研究下,发现原来不难,真的是心态爆炸了。题目中的概念:(其实静下心来看,题目很好理解的。。可能是考试时心态崩了。。。)ipv4地址:一共32位,分为4个十进制数表示。ip前缀:<(ip地址) / (约掉后面的0之后ip地址的长度–前缀长度)>ip前缀列表:一列ip前缀呗。匹配:ip地址的前面前缀长度的地址和...原创 2019-09-12 18:48:58 · 345 阅读 · 0 评论 -
CCF-201803-3-URL映射
这题题目说的不够细,url后面有‘/’的只能和后面也有‘/’的规则匹配。例如url:/abc/def/ 和 规则:/abc/def 是不能匹配的。然后后面没有‘/’的url只能和后面没有‘/’的规则匹配(path与有结束的url匹配)。以前不懂,现在才想到这个地方,修改下代码就终于100了。python代码:# 匹配url和规则def match(url, rule, args): ...原创 2019-09-08 15:09:03 · 204 阅读 · 0 评论 -
CCF-201803-4-棋局评估
终于做了这道题,看网上说的是要用博弈论的人工智能的算法----对抗搜索,极大极小值算法。这个算法大概意思就是,定义一种得分情况,然后给每个局势定义一个得分,正数表示先手有利的,负数表示后手有利的,每次博弈,找最有利于自己的情况。对于先手来说,每次找所有可下棋位置的分值的最大值,后手就是最小值。这道题来说,深搜递归遍历所有出现的棋局,计算所有棋局的分值。复杂度为 9!,不大,可以直接暴力搜索所有...原创 2019-09-02 11:22:46 · 332 阅读 · 1 评论 -
CCF-201612-3-权限查询
题目大意:用户有多个角色,角色有多个权限,查询某个用户是否有某个权限。权限分有无等级权限和有等级权限,查询时,无论是否带等级,都要先判断权限的存在。有则true,否则false。查询有等级权限时,带有等级的,要判断是否用户该权限的等级是否大于等于查询的等级,是就true,否则false。不带等级的权限查询就返回该权限的等级。细节:用户可能有重复的权限,带等级的重复权限,要更新为最高的等级。...原创 2019-08-27 11:18:46 · 221 阅读 · 0 评论 -
CCF-201509-4-高速公路
这题很明显是要找强连通分量,找到图中所有的强连通分量,并计算每个分量的城市对数相加得出答案。计算城市对的方法为:强连通分量的结点数 * (强连通分量的结点-1)/ 2python代码:import syssys.setrecursionlimit(10 ** 7)def tarjan(u): global idx global bcnt idx += 1 ...原创 2019-08-21 17:21:14 · 245 阅读 · 0 评论 -
CCF-201512-4-送货
明显一笔画问题,求欧拉路径,就是不知道为什么不能100,我用网上的几个大神的代码都没100,都是运行错误(RE)。估计是ccf那边的问题。python 代码:import syssys.setrecursionlimit(10 ** 6)def dfs(u): for v in graph[u]: key = str(min(u, v)) + ' ' + st...原创 2019-08-23 16:51:55 · 262 阅读 · 2 评论 -
CCF-201312-4-有趣的数
这题考动态规划动态规划:由已知的状态推出未知的状态。变化的量有两个:位数,状态数位数为n这题一共有6种状态0 – 0 1 (2) 31 – (0) 1 (2) 32 – 0 1 (2) (3)3 – (0) (1) (2) 34 – (0) 1 (2) (3)5 – (0) (1) (2) (3)代码中的数组 status[ i ][ j ],表示第i位,第j个状态的个数。然...原创 2019-07-01 15:32:44 · 203 阅读 · 0 评论 -
CCF-201903-2-二十四点
模拟二十四点游戏,本质就是让你求中缀表达式。我这里用栈解题,两个栈,一个数字栈,一个操作符栈。读取到表达式后,顺序读取字符,遇到操作符压进操作符栈,遇到数字,看前一个操作是否是乘除,是就弹出前一个数字和前一个操作符,前一个数字和当前数字计算完后再压回数字栈。注意,因为第一个数字前面没有操作符,所以第一个数字直接就压进数字栈,不用判断前一个操作符。最后在按顺序把栈中的数字按符号相加减。细...原创 2019-04-16 15:22:11 · 1402 阅读 · 1 评论 -
CCF-201903-1-小中大
这题的用例在考试的时候是错的,当时还觉得很奇怪,试题页面黄色的内容是修改后的。因为数列是有序的(升序或者降序),直接提取首尾的数字即可,然后再计算中位数。这三个数按降序排序后输出。python代码n = int(input())nums = [int(e) for e in input().split()]ans = [nums[0], nums[-1]]if n % 2 == 0:...原创 2019-04-16 14:23:14 · 627 阅读 · 0 评论 -
第十六次CCF认证总结
恶心不解释原创 2019-03-22 09:15:39 · 343 阅读 · 0 评论 -
第十五次CCF认证总结
这一次ccf,准备了挺多,但是还不够完全。首先,有进步了,图论基础知识点学了一些,这次就用上了,但是还有很多知识点要学,毕竟上几次都有出现新知识点。第三题这次没写,也是有点遗憾,但是也说明自己没有好好训练好第三题这种字符串大模拟。这一次第二题没拿满分,也算是预料中吧,因为平时自己做题的也不敢保证第二题能百分百100。这次第二题重做了后发现,是超时问题。。。所以第二题也不能小看时间复杂度,最好能找到...原创 2019-01-12 16:33:00 · 1046 阅读 · 0 评论 -
CCF-201403-3-命令行选项
第三题一如既往的是模拟题,这次模拟解释命令行。做第三题的心态就是:不要被题目吓到,不用急,慢慢看完就好,最后注意细节。这一题规则很清晰,难度适中。题目大意给一个格式化字符串(每个字母是一个选项),再给出几个命令行,看每个命令行里面哪些选项符合就输出哪些,遇到不符合的就结束分析思路先把选项分类好。一种是不带参数类型(列表存储),另一种是带参数类型(存储数据结构因人而异,python用字典,...原创 2018-11-11 13:25:24 · 443 阅读 · 0 评论