CCF CSP认证题解
分享往年的CSP认证题解
坤斤拷
握り信じたうたかたの影を
展开
-
CCF201903-2 二十四点(表达式树)
回忆一下题意,大概是给定T个四个正整数的四则运算,以形如1x2+3/4的字符串形式给出,要求计算各算式是否等于24,分别输出"Yes"或"No"。考场上的想法是,建立一棵表达式树,然后遍历这棵树,即可算出结果,与24作比较。然后恰巧带了紫书,紫书中有建表达式树的板子,就抄了上去。紫书中建的表达式树是用一个字符数组来存储这棵树的中序遍历,于是,只要定义一个栈,并从后往前遍历表达式树的中序遍历数组...原创 2019-03-22 00:03:01 · 956 阅读 · 5 评论 -
CCF201812-1 小明上学
传送门:CCF201812-1 小明上学为了熟悉Python时拿来练手的题目,感觉读取用空格分隔的数据好麻烦啊,不知道有没有什么更好的方法。r, y, g = input().split()r, y, g = int(r), int(y), int(g)n = int(input())sum = 0for i in range(n): k, t = input().sp...原创 2019-03-11 12:52:50 · 219 阅读 · 0 评论 -
CCF201812-4 数据中心(最小生成树)
传送门:CCF201812-4 数据中心题目初看蛮复杂,其实就是个最小生成树模板题...本质上是求n个点构成的最小生成树的最大边权,可以直接抄kruskal最小生成树的板子。给的root完全不需要考虑,读进来丢一边就完事了。#include <bits/stdc++.h>#define ll long long#define INF 0x3f3f3f3fusing na...原创 2019-03-11 12:45:59 · 239 阅读 · 0 评论 -
CCF201809-4 再卖菜(差分约束 / 最短路)
传送门:CCF201809-4 再卖菜差分约束,可以参考这里。#include <bits/stdc++.h>#define ll long long#define INF 0x3f3f3f3fusing namespace std;const int maxn = 3e2+3;struct Edge{ int v, w; Edge() {} ...原创 2019-08-23 23:04:28 · 215 阅读 · 0 评论 -
CCF201803-4 棋局评估(DFS)
传送门:CCF201803-4 棋局评估一道暴力搜索。由于两人都以最优策略行棋,故每当轮至1或2时,都对棋盘当前剩余的所有可走位置进行回溯dfs,以得出当前局面的最优结果。又因为1胜时得分为正,2胜时得分为负,故计算最值时,对1使用max,对2使用min。下面是带注释的代码:#include <bits/stdc++.h>#define ll long long#de...原创 2018-09-08 15:41:34 · 701 阅读 · 0 评论 -
CCF201803-3 URL映射(大模拟)
传送门:CCF201803-3 URL映射做的第一道大模拟,代码一小时,debug四小时,很难受。总的来说不是一道很麻烦的题,但有一些坑需要说明:除了最后一个参数为<path>时,规则末尾有无‘/’是不同的; 有可能出现空规则,即单独一个‘/’; 若一个url满足多个规则,按照输入时的顺序输出第一个; <int>类型参数需要抹去前导零。最自闭的一个坑,花...原创 2018-09-11 01:21:11 · 400 阅读 · 1 评论 -
CCF201712-4 行车路线(最短路)
试题编号: 201712-4 试题名称: 行车路线 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航。 小芳将可能的道路分为大道和小道。大道比较好走,每走1公里小明会增加1的疲劳度。小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公里小明会增...原创 2018-09-07 16:07:24 · 632 阅读 · 2 评论 -
CCF201709-4 通信网络(DFS)
传送门:CCF201709-4 通信网络第一次做这道题,是17年10月份,当初的我还是一个接触编程只有一个月的巨型蒟蒻,代码十分钟,debug十小时,最后以RE告终......如今的我仍然是个蒟蒻,WA了一发才AC,很心酸....这题思路蛮简单,就是对于每个点,搜索其向前追溯与向后展拓所能到达的所有的点,输出能访问到所有点的点的个数。直接上代码:#include <bits...原创 2018-09-08 15:53:29 · 328 阅读 · 0 评论 -
CCF201709-5 除法(树状数组 / 线段树)
传送门:CCF201709-5 除法同样是17年10月刚接触编程一个月的蒟蒻的我做过的题,当初是暴力做的,结果必然是超时的QAQ。这道题想不到会是第五题,直接上树状数组就好了,但还是建了一棵树练了练手,下面会有树状数组和线段树版本的代码。虽然题目要求的更新是对部分数进行除法,实际上,我们可以对原数组进行预处理,找出满足条件的数,得到商,然后在树上单点修改,就变得非常容易了。但仍有一些需...原创 2018-09-08 16:47:01 · 397 阅读 · 0 评论 -
CCF201703-4 地铁修建(最短路 / 最小生成树+并查集)
问题描述试题编号: 201703-4 试题名称: 地铁修建 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 A市有n个交通枢纽,其中1号和n号非常重要,为了加强运输能力,A市决定在1号到n号枢纽间修建一条地铁。 地铁由很多段隧道组成,每段隧道连接两个交通枢纽。经过勘探,有m段隧道作为候选,两个交...原创 2018-09-06 20:44:21 · 942 阅读 · 4 评论 -
CCF201609-4 交通规划(最短路)
传送门:CCF201609-4 交通规划1为首都,要求改造的铁路到首都的最短路不变,且其他城市两两高铁互通,故直接对1用dijkstra,算出其他点到1的最短路,此时即满足了以上两个条件。由于要计算需要改造的长度,如果直接将其他点到1的最短路累加,会出现重复计算的现象,所以需要增加一个c数组,c[i]用来记录点i的前驱到i点的长度,在dijkstra更新时一起更新,最后将c[i]累加即可。...原创 2018-09-08 16:18:40 · 408 阅读 · 0 评论 -
CCF201609-3 炉石传说(模拟)
传送门:CCF201609-3 炉石传说很暴力的模拟题。就按照题目要求一顿瞎几把模拟就好了。唯一要注意的点就是,如果一方攻击对方的英雄,并且导致英雄死亡,如果不加处理,会导致越界,即随从本来只能在1-7位,越界到0位英雄位上了。博主就因为疏忽了这个,第一发只拿了70分。下面是AC代码:#include <bits/stdc++.h>#define ll long l...原创 2018-09-14 21:58:24 · 370 阅读 · 0 评论 -
CCF201604-4 游戏(BFS)
传送门:CCF201604-4 游戏常规bfs,将vis数组添加一个时间的维度,即可避免重复经过一个点。#include <bits/stdc++.h>#define ll long long#define INF 0x3f3f3f3fusing namespace std;const int max0 = 128;struct node{ int x, ...原创 2018-09-08 16:04:41 · 248 阅读 · 0 评论 -
CCF201512-4 送货(欧拉回路 / 通路)
传送门:CCF201512-4 送货这道题有毒。目前网上流传的题解大部分是拿不了满分的,我看了将近十个题解,都是只能拿80分。为什么呢?因为这道题的数据范围有毒:前30%的评测用例满足:1 ≤ n ≤ 10, n-1 ≤ m ≤ 20。前50%的评测用例满足:1 ≤ n ≤ 100, n-1 ≤ m ≤ 10000。所有评测用例满足:1 ≤ n ≤ 10000,n-1 ≤ m ≤ 1...原创 2018-09-16 01:04:44 · 528 阅读 · 4 评论 -
CCF201509-4 高速公路(强连通分量)
传送门:CCF201509-4 高速公路Tarjan强连通分量算法的模板题。求得强连通分量后,包含的点为cnt个,其中的任意两个城市都是便利城市对,数量为,亦即,将每个强连通分量的便利城市对个数累加,即是答案。#include <bits/stdc++.h>#define ll long long#define INF 0x3f3f3f3fusing namespa...原创 2018-09-15 19:44:38 · 414 阅读 · 0 评论 -
CCF201503-4 网络延时(树的直径 / DFS)
传送门:CCF201503-4 网络延时考前刷一道第四题QAQ题意是给你一棵树,求树的直径。如果每个节点依次进行一次dfs求最大深度,是会超时的(应该)。所以,我们先对任意一个节点u进行一次dfs,找到离u最远的节点v,再对v进行一次dfs,得到的最大深度就是答案了。好了,博主要准备去考CCF了QAQ#include <bits/stdc++.h>#define l...原创 2018-09-16 12:30:26 · 178 阅读 · 0 评论 -
CCF201412-4 最优灌溉(最小生成树)
传送门:CCF201412-4 最优灌溉很水的模板题。不过后来发现了并查集的按秩合并优化,但据说优化效果不咋地,所以这里挖个坑,以后来补。下面上代码,基本上可以当作kruskal的板子用了:#include <bits/stdc++.h>#define ll long long#define INF 0x3f3f3f3fusing namespace std;...原创 2018-09-09 16:33:30 · 422 阅读 · 0 评论 -
CCF201409-4 最优配餐(BFS)
传送门:CCF201409-4 最优配餐一道很神奇的BFS题(蒟蒻的眼光)。题意大概是有m家门店,分别点了ci份单的k位顾客以及d个障碍物,骑手每携带一份外卖走一个单位花费一元钱,问m家门店该怎么分配配送任务使得总费用最少,当然,只需要输出最少的总费用。身为一个蒟蒻,最开始我对每家分店都进行了一次BFS,超时了,很难受。不知该如何是好的我按捺不住偷代码的欲望,不小心瞥到了“所有分店同时BF...原创 2018-09-09 15:24:10 · 359 阅读 · 0 评论 -
CCF201403-4 无线网络(最短路)
传送门:CCF201403-4 无线网络若把距离小于等于r的两路由器视为存在一条边,则题目可以归为求无权无向图的最短路径,就变得十分简单了。直接跑一遍spfa,求得点1到其他点的最短路。因为题目要求的是最少经过的中转路由器的数量,而我们用spfa求得的最短路是包含了终点的,故要输出点1到点2的最短路的值-1 (s)。#include <bits/stdc++.h>#de...原创 2018-09-09 01:17:50 · 350 阅读 · 0 评论 -
CCF201312-5 I’m stuck!(DFS)
传送门:CCF201312-5 I’m stuck!题目要求的是以最初的起点可到达的点中的一点为新的起点,这些新的起点中不可到达终点的点个数。于是,可以先对最初的起点进行一次dfs,找出所有其可达的点,并做上标记。然后,对这些点分别做一次dfs,检验其是否能到达终点,统计不能到达的点的个数。下面是代码:#include <bits/stdc++.h>#define ...原创 2018-09-08 16:26:16 · 238 阅读 · 0 评论 -
CCF201312-4 有趣的数(动态规划)
试题编号: 201312-4 试题名称: 有趣的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次。 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前。 ...原创 2018-09-08 15:13:35 · 290 阅读 · 0 评论