刷题笔记:CCF认证
Zee_Chao
to be slim, to be smart
展开
-
CCF认证解题目录(C++)
试题编号 试题名称 思想方法 解题链接 201312-1 出现次数最多的数 https://blog.csdn.net/Zee_Chao/article/details/89576713 201312-2 ISBN号码 字符串处理 https://blog.csdn.net/Zee_Chao/article/details/8957...原创 2019-06-09 17:08:24 · 410 阅读 · 0 评论 -
CCF认证2015032-数字排序
本人初学,水平有限,若有不足,恳请赐教!简单的方法是使用sort()排序,其中需要根据要求自定义排序的优先级。具体代码如下:#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(){ //FILE *stream;...原创 2019-03-29 19:37:08 · 265 阅读 · 0 评论 -
CCF认证2015123-画图
本人初学,水平有限,若有不足,恳请赐教!显然,这道题需要设计两类操作,一个是画线,另一个是填充。画线的时候要注意画竖线时要先验证待画位置是否已经为横线或是交叉线(我之前就是因为忽略了交叉的情况致使最后的结果一直都是90分TT),画横线的时候也是如此考虑。填充的时候可以使用BFS或DFS算法来进行操作。由于题目的要求,还需要一个额外的标记数组来存放哪些位置已经被画线从而控制填充操作的范围。...原创 2019-03-29 14:09:58 · 260 阅读 · 0 评论 -
CCF认证2016042-俄罗斯方块
本人初学,水平有限,若有不足,恳请赐教!本题最直接的做法就是将整个4*4的板块放入15*10的地图中依次进行位移模拟,但是这样会存在许多不必要的计算而且会加大代码量。不过可以这个思想仍然可以借鉴。那就是将板块中各个方块(即值为1)在板块中的坐标(根据题意坐标数目必为4)给记录下来。用提取的坐标进行模拟。具体代码如下:#include <iostream>#inclu...原创 2019-02-27 13:57:21 · 301 阅读 · 0 评论 -
CCF认证2016041-折点计数
本人初学,水平有限,若有不足,恳请赐教!具体代码如下:#include <iostream>#include <vector>using namespace std;int main(){ int n; cin >> n; int sum = 0; vector<int> in(n); for(int i = 0;...原创 2019-02-26 20:37:39 · 204 阅读 · 0 评论 -
CCF认证2016093-炉石传说
本人初学,水平有限,若有不足,恳请赐教!这道题应该是到目前为止我做过的最简单的第三题。本题没有什么复杂的算法和数据结构的设计,只需要根据要求自定义数据结构即可。我的思路是先设计随从类型,其属性包括攻击力和生命值。然后再设计英雄类型,其属性包括生命值和随从链表。召唤随从和攻击的操作进而变成了链表的操作。操作格式的判断可以使用正则表达式。具体代码如下:#include <ios...原创 2019-02-26 20:09:27 · 312 阅读 · 0 评论 -
CCF认证2018091-卖菜
本人初学,水平有限,若有不足,恳请赐教! 具体代码如下:#include <iostream>using namespace std;int day1[1010]; //记录第一天各商店的价格,编号从1开始int main(){ int n; cin >> n; for(int i = 1; i < n + 1; i++) //读入...原创 2019-02-21 12:54:57 · 218 阅读 · 0 评论 -
CCF认证2016092-火车购票
本人初学,水平有限,若有不足,恳请赐教!可以利用二维向量来模拟此过程,每一个内部向量按照先后次序将5-1,10-6,15-11,……,100-96压入(栈操作)。然后进行模拟。如果当前排剩余空座位(栈内元素个数)满足购票数则进行相应次数的出栈操作,否则按次序遍历各个栈然后输出。具体代码如下:#include <iostream>#include <vector...原创 2019-02-26 17:05:15 · 201 阅读 · 0 评论 -
CCF认证2016091-最大波动
本人初学,水平有限,若有不足,恳请赐教!具体代码如下:#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(){ int n; cin >> n; vector<int> in(n); v...原创 2019-02-26 15:54:54 · 200 阅读 · 0 评论 -
CCF认证2014121-门禁系统
本人初学,水平有限,若有不足,恳请赐教!具体代码如下:#include <iostream>#include <vector>using namespace std;int main(){ int n; cin >> n; vector<int> mp(1010, 0); for(int i = 0; i < ...原创 2019-03-29 19:53:09 · 182 阅读 · 0 评论 -
CCF认证2015093-模板生成系统
本人初学,水平有限,若有不足,恳请赐教!实不相瞒,这道题卡了我好几天。不过让我没有想通的并不是算法的实现,而是正则表达式。我的主要思路是:首先,从模板中提取可能出现的变量。然后,再根据后续数据为每个变量进行赋值(或者说建立映射)。最后遍历模板进行替换。注意:由于题目明确要求不会出现递归生成的情况,因此不可以反复对同一个模板字符串进行正则表达式的替换操作。不信的话可以用以下测试用例试试。...原创 2019-03-28 14:19:11 · 309 阅读 · 0 评论 -
CCF认证2014031-相反数
本人初学,水平有限,若有不足,恳请赐教!具体代码如下:#include <iostream>using namespace std;int data[1010];int main(){ int n, sum = 0; cin >> n; while(n--) { int t; cin >> t; t = abs(t...原创 2019-04-26 14:33:16 · 147 阅读 · 0 评论 -
CCF认证2014093-字符串匹配
本人初学,水平有限,若有不足,恳请赐教!从今天的角度来看这道题不配作为第三题出现。因为如果使用了正则表达式那么这道题很快就会解决。具体代码如下:#include <iostream>#include <string>#include <regex>using namespace std;int main(){ //FILE *s...原创 2019-04-19 17:13:15 · 255 阅读 · 0 评论 -
CCF认证2014092-画图
本人初学,水平有限,若有不足,恳请赐教!使用一个二维数组来存放整个坐标系,假设每一个1*1的小方格都用其左下角的点的坐标来表示,那么对此小方格涂色可以转化为对坐标对应的二维数组元素进行改变。从而只需统计有多少个元素发生了改变即可得到结果。为了方便统计,首先将二维数组全部初始化为0,每需要将一个小方格涂色时就令其对应的元素自增。自增后立即判断该元素是否为1,如果是则说明此小方格是第一次被...原创 2019-04-19 16:47:14 · 262 阅读 · 0 评论 -
CCF认证2014091-相邻数对
本人初学,水平有限,若有不足,恳请赐教!具体代码如下:#include <iostream>#include <vector>#include <algorithm>using namespace std;vector<int> data(10010, 0);int main(){ int n, m = 0, ans...原创 2019-04-18 21:13:31 · 190 阅读 · 0 评论 -
CCF认证2019032-二十四点
本人初学,水平有限,若有不足,恳请赐教!这是一个中缀表达式求值问题,同样也是一个经典的栈应用问题。参阅相关资料可以发现这类问题的求解一般都是先确定一张运算符表,然后再根据确定的优先级以及当前扫描到的字符来进行相关操作的。具体代码如下:#include <iostream>#include <string>#include <stack>#...原创 2019-04-18 17:54:06 · 737 阅读 · 0 评论 -
CCF认证2019031-小中大
本人初学,水平有限,若有不足,恳请赐教!这应该是CCF认证有史以来最复杂的第一题了。首先中位数的概念同中学数学概念。数据为奇数个时为最中间的数,否则为最中间的两个数的算数平均数。不过还要注意的是在第二种情况下又要分两种情况考虑。一种是计算结果为整数要按照整数输出,另一种是计算结果为小数,需要按保留一位小数的结果输出。具体代码如下:#include <iostream>...原创 2019-04-18 15:56:05 · 1347 阅读 · 0 评论 -
CCF认证2013122-ISBN号码
本人初学,水平有限,若有不足,恳请赐教!具体代码如下:#include <iostream>#include <string>#include <regex>using namespace std;int main(){ //FILE *stream; //freopen_s(&stream, "data.txt", "r...原创 2019-04-26 21:46:39 · 321 阅读 · 0 评论 -
CCF认证2013121-出现次数最多的数
本人初学,水平有限,若有不足,恳请赐教!建立从数字到其出现次数的映射。在完成所有输入后按照要求对其进行筛选。具体代码如下:#include <iostream>#include <unordered_map>using namespace std;int main(){ int n; cin >> n; unordered_m...原创 2019-04-26 21:05:22 · 1094 阅读 · 0 评论 -
CCF认证2014032-窗口
本人初学,水平有限,若有不足,恳请赐教!1.方法1根据题意,所有窗口的输入都是自底向上的,选中某个窗口此窗口会置为最顶端且其他窗口相对层叠次序不变。我们可以模拟这个过程。首先,在输入窗口坐标时令屏幕上此窗口范围内的所有点全部初始化为此窗口的编号,并且后输入的窗口可以覆盖之前的已有的窗口编号(画家算法),根据输入顺序恰好可以得到所有窗口的初始状态。然后,后续的点击操作如果选定的是某个窗口...原创 2019-04-26 17:15:54 · 258 阅读 · 0 评论 -
CCF认证2018124-数据中心
本人初学,水平有限,若有不足,恳请赐教! 这道题有很大的迷惑性!如果直观地从字面上理解,题目的意思是说由一个图可以得到的所有生成树中,每个生成树中都能由条件计算得到一个,那么所有得到的中最小的是几(即最优树结构的流水线耗时)?通过观察并结合条件可以发现,每个实际上就等于对应的生成树中最大权值边的权值。实际上,这道题等价于求一个图的最小生成树(MST)中的最大边的权值(注意,MST只...原创 2019-02-20 23:17:21 · 592 阅读 · 0 评论 -
CCF认证2016122-工资计算
本人初学,水平有限,若有不足,恳请赐教!具体代码如下:#include <iostream>using namespace std;int main(){ int T; cin >> T; int s[] = { 0, 3500, 3500 + 1500, 3500 + 4500, 3500 + 9000, 3500 + 35000, 35...原创 2019-02-26 13:53:12 · 279 阅读 · 0 评论 -
CCF认证2018123-CIDR合并
本人初学,水平有限,若有不足,恳请赐教!由于题目信息太多且有些复杂(简称看不懂或懒得看~),因此本题的解题思路主要参考:日沉云起:CCF认证 201812-3CIDR合并。本文在其思路的基础上对代码进行了一些修改。 首先,自定义结构IP,其属性包括ip地址(ip)和前缀长度(len)。由于题目用到的ip地址全部都是ipv4的地址,考虑其特性可以使用32位无符号整数来进行存储和运算。将I...原创 2019-02-20 17:00:06 · 1749 阅读 · 5 评论 -
CCF认证2017122-游戏
本人初学,水平有限,若有不足,恳请赐教!目录1.方法12.方法21.方法1这个问题类似于约瑟夫环问题,因此可以参考其非动态规划的算法也就是对整个过程进行模拟。使用一个向量(循环队列)存放每个人是否存活的信息(初始化全为true)。每淘汰一人则将其置为false,直至剩下一个人为止。具体代码如下:#include <iostream>#inclu...原创 2019-02-24 18:02:10 · 146 阅读 · 0 评论 -
CCF认证2017121-最小差值
本人初学,水平有限,若有不足,恳请赐教!可以证明,差值最小的两个数一定是在数轴上距离最近的两个数。因此可以考虑先对输入数据进行排序,然后再求出相邻数据的差值中最小的那个即可。具体代码如下:#include <iostream>#include <vector>#include <algorithm>using namespace std...原创 2019-02-24 16:27:28 · 260 阅读 · 0 评论 -
CCF认证2015121-数位之和
本人初学,水平有限,若有不足,恳请赐教!具体代码如下:#include <iostream>using namespace std;int main(){ int n; cin >> n; int sum = 0; while(n) { sum += n % 10; n /= 10; } cout << sum; ...原创 2019-02-28 14:08:07 · 175 阅读 · 0 评论 -
CCF认证2016043-路径解析
本人初学,水平有限,若有不足,恳请赐教!目录1 方法12 方法2这道题实际上并不是很难,然而我做了一个下午。其实我的思路并没有什么问题,主要问题出现在两处,一处是忽略的输入为空串代表当前目录的条件,另一处是被题目的样例输入误导了……这里我提供了一个比较全面的测试用例供大家使用。9/d2/d3./d1/d2/../d4/f1/d1/./f1./d1///f1/...原创 2019-02-28 13:57:04 · 259 阅读 · 0 评论 -
CCF认证2018033-URL映射
本人初学,水平有限,若有不足,恳请赐教!本文思路参考:日沉云起:CCF认证 201803-3URL映射——36行代码(正则表达式)。一开始自己想的时候还不知道C++11标准已经可以如此完备地封装了正则表达式(sigh~),结果自己做字符串匹配走了不少弯路。有关C++正则表达式的学习可以参考:Rhine404:C++正则表达式(regex_match、regex_search与regex_r...原创 2019-02-24 15:06:29 · 402 阅读 · 3 评论 -
CCF认证2018032-碰撞的小球
本人初学,水平有限,若有不足,恳请赐教!根据提示可以发现题目对可能发生的情况做了大大的简化(毕竟这只是第二题……)。因此这道题主要需要我们解决的问题就是如何设计数据结构存储小球信息以及如何进行小球的移动操作和碰撞检测。首先,在数据结构设计上,可以自定义类型来存放小球的位置和移动方向。其中,移动方向用整型数据表示,方向取1代表右移,取-1代表左移。这样小球移动后的位置信息可以更新为原来的...原创 2019-02-23 13:09:19 · 270 阅读 · 0 评论 -
CCF认证2018031-跳一跳
本人初学,水平有限,若有不足,恳请赐教!具体代码如下:#include <iostream>#include <stdio.h>using namespace std;int main(){ int cur = 1, sum = 0, two = 0; //依次表示当前扫描数字,总得分,连续2出现的次数 while(~scanf_s("%d",...原创 2019-02-22 20:41:01 · 211 阅读 · 0 评论 -
CCF认证2018093-元素选择器
本人初学,水平有限,若有不足,恳请赐教!目录1 解题思路1.1 数据结构设计1.2 读取并存储数据1.3 查找函数2具体代码3 反思不足3.1 题目理解3.2 STL容器选择与熟练程度3.3 加快调试速度3.4 含空格字符的字符串的输入1 解题思路1.1 数据结构设计需要考虑如何存储文档结构信息。显然,输入的文档结构数据具有层次关系。如果...原创 2019-02-22 15:02:26 · 286 阅读 · 0 评论 -
CCF认证2015122-消除类游戏
本人初学,水平有限,若有不足,恳请赐教!本题思路是按行和列分两次进行相邻数据比对,如果满足要求,则将其坐标记录。然后将坐标对应数值变为0即可。具体代码如下:#include <iostream>#include <vector>using namespace std;int main(){ //FILE *stream; //freopen...原创 2019-02-28 16:46:01 · 226 阅读 · 0 评论 -
CCF认证2015091-数列分段
本人初学,水平有限,若有不足,恳请赐教!具体代码如下:#include <iostream>using namespace std;int main(){ int n; cin >> n; int cur = -1; int sum = 0; while(n--) { int temp; cin >> temp; ...原创 2019-02-28 16:56:01 · 163 阅读 · 0 评论 -
CCF认证2015092-日期计算
本人初学,水平有限,若有不足,恳请赐教!具体代码如下:#include <iostream>using namespace std;int main(){ int days[2][13] = { {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 3...原创 2019-02-28 17:16:38 · 288 阅读 · 0 评论 -
CCF认证2018122-小明放学
本人初学,水平有限,若有不足,恳请赐教!与上学问题不同,这里每个路口的状态都是相对于小明离开学校的初始时刻的状态。因此在小明的整个行驶过程中,每个路口的状态也都是动态变化的。因此问题的关键就是要正确地计算小明在行驶到某一个路口时此路口灯的颜色和持续时间。由于红绿灯的顺序和持续时间存在周期性,故可利用此性质计算小明在到达某个路口时红绿灯的状态。首先,计算整个红绿灯的周期x=r+g+y。不...原创 2019-02-20 15:19:59 · 421 阅读 · 0 评论 -
CCF认证2018121-小明上学
本人初学,水平有限,若有不足,恳请赐教! 首先要注意t在不同情况下的不同含义。根据红绿灯的发光顺序可以得到如下规律:1.如果没有红绿灯则总时间直接累加时间t;2.如果为绿灯则直接穿过总时间不变(或者说总时间加0);3.如果为红灯则由于红灯后为绿灯可以直接穿过,因此只需等待红灯的剩余的时间t就可以直接穿过。故时间仍要累加t;4.如果为黄灯则由于黄灯后为红灯,红灯后才是绿灯...原创 2019-02-20 14:11:01 · 314 阅读 · 0 评论 -
CCF认证2016121-中间数
本人初学,水平有限,若有不足,恳请赐教!可以证明满足中间数定义的数一定是位于整个有序序列中间位置的数。因此,只要先将输入序列排序然后选取中间位置的值接着根据定义验证即可。具体代码如下:#include <iostream>#include <vector>#include <algorithm>using namespace std;...原创 2019-02-25 21:18:11 · 187 阅读 · 0 评论 -
CCF认证2017032-学生排队
本人初学,水平有限,若有不足,恳请赐教!由于数据规模并不是很大,因此可以暴力求解。又因为题目需要进行频繁的插入和删除操作,因此选择list容器来存放数据。具体代码如下:#include <iostream>#include <vector>#include <list>#include <numeric>using nam...原创 2019-02-25 20:46:23 · 176 阅读 · 0 评论 -
CCF认证2017031-分蛋糕
本人初学,水平有限,若有不足,恳请赐教!具体说来就是累加然后判断,满足不小于k则将累加变量清零并将结果计数加一。唯一需要注意的就是对于最后一个分的蛋糕的人其分得的蛋糕重量可能不足k。具体代码如下:#include <iostream>using namespace std;int main(){ int n, k; cin >> n >...原创 2019-02-25 20:00:43 · 175 阅读 · 0 评论 -
CCF认证2017092-公共钥匙盒
本人初学,水平有限,若有不足,恳请赐教!每行输入的w,s和c实际上代表了两个操作,先是在s时刻将钥匙w取出,再是在s+c时刻将钥匙w放入。由于整个过程是按照时间顺序来进行的,因此可以考虑将每个时刻的具体操作记录下来然后按照时间先后顺序来处理。根据题目的要求,可以设计一个自定义类型来记录每次操作。其属性包括操作时间,操作对象(钥匙编号),操作类型(存或取)。将所有操作按照时间、先存后取和先小...原创 2019-02-25 12:30:14 · 206 阅读 · 0 评论