CCF-CSP
文章平均质量分 75
热爱Data的直男熙哥
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
CCFCSP 202009-3 点亮数字人生
思路拓扑排序,从入度为0的节点开始,逐步查看这个节点是哪些节点的输入,并进行计算即可如果最后仍然存在入度非0的点,说明存在环本题使用邻接矩阵进行计算,注意矩阵别开太大,否则空间占据过大会扣分注意何时初始化邻接矩阵和图节点信息代码#include <iostream>#include <stdio.h>#include <vector>#include <queue>#include <string.h>using name原创 2020-12-12 14:34:16 · 400 阅读 · 1 评论 -
CCFCSP 201812-4 数据中心
思路虽然题目看起来稍微有点复杂(比大模拟题好多了www),但其实就是非常简单的最小生成树,因为kruskal记的比较清楚且空间复杂度稍微低一点就用这个了。注意在找到父亲结点的时候,也需要修改查找父节点一路上的点的father值,之后查找就会减少递归次数,不考虑这点的话只能拿到70分(超时)代码#include <iostream>#include <stdio.h>#include <algorithm>#include <vector>u原创 2020-12-08 21:20:07 · 223 阅读 · 0 评论 -
CCFCSP 201812-3 CIDR合并(90分超时)
思路没啥可说的,根据题目要求写就好由于比较菜又很懒,所以超时了,就懒得再继续做了这次给我最大的体验就是好好看测试样例,一开始一直0分,看了测试样例才知道感情我排序那一步都没对,才改了cmp函数。代码(90分超时)#include <iostream>#include <vector>#include <algorithm>using namespace std;struct ip{ int four[4]; int len;};原创 2020-12-07 21:04:20 · 275 阅读 · 0 评论 -
CCFCSP 201903-3 损坏的RAID5
思路老大模拟题了,但如果仔细阅读题意拿到70分难度并不大,如果做一定的简单优化就可以100分主要时间复杂度在cout输出(不写 ios::sync_with_stdio(false); 只能拿到30分)和查找属于第几个盘第几块上,下面附上了循环方法(70分)和非循环纯找规律法(100分)供大家参考循环法就不多说了,遍历每个盘,是p就跳过,不是p就继续直到找到该位置。非循环法则是寻求规律先找到每个盘的首位置先不考虑P,第一个条带就是start,start+1 … start+l,那么 某位置%原创 2020-12-07 09:55:30 · 245 阅读 · 0 评论 -
CCFCSP 201909-3 字符画
思路wdnmd CCF的大模拟题最恶心的地方不是代码量大,而是题总是说不明白。这道题需要仔细筛选题干找到题目要求。代码写作1小时,看题3小时才从0到100。本题注意事项输出每一个R,G,B对应的值,注意如得到17,输出为"\x31\x37",而非输出17的十六进制(11)输入为16进制,但不知道为啥转为10进制后求平均值,无需转16进制,而是直接转字符串才能通过的。在无重复,非0的情况下每一个代码块前都有"\x1B\x5B\x34\x38\x3B\x32\x3B"在与上一代码块重复情况下(注意原创 2020-12-04 21:03:53 · 245 阅读 · 0 评论 -
CCFCSP 201909-4 推荐系统
思路这题贼坑,题目的排序方式写的乱七八糟。一开始个人理解里是每一个种类根据id从小到大的原则输出。也就是说:先所有商品根据score排序,再根据搜索命令得到k个score最大的商品,其中0…m类还要限制在k0 , k1,k2,k3,…,km-1的范围内。输出时候根据类从小到大,id从小到大的顺序输出。但其实输出的时候根本无需对每个类中的id排序,只需要根据score从小到大的顺序输出即可,在score相同的情况下才考虑id。针对需要排序并且常做插入和删除操作的情况,我们使用set,并使用map对该原创 2020-12-04 10:16:27 · 333 阅读 · 1 评论 -
CCFCSP 201912-4 区块链 80分(超时)
思路事实证明不要想太多,我一开始的时候考虑如果时间非顺序输入要如何解决,给自己凭空增加了2小时的无效工作量,事实证明他的数据时间是顺序输入的在1号node更新后,告诉2号考虑一下更新,如果2号更新了,务必要把2号也加入到传播队列里。这里使用队列来进行传播操作,队列中存放着该节点当前时间的状态以及何时需要更新其邻居。本题的顺序应该是,先更新邻居(传播链),再查询,再插入块。由于太过暴力超时了啊哈哈,时间紧迫,所以就没再做改进。代码(80分)#include <iostream>原创 2020-12-01 21:29:52 · 281 阅读 · 0 评论 -
CCFCSP 201912-3 化学方程式(70分)
思路大模拟题,没啥可说的,左右两侧分别计算元素数量,然后用vector(单纯喜欢用而已,很多大佬似乎用map)判断左右是否配平。遇到左括号,虽然可能存在嵌套情况,但只要找到配套的右括号即可。随后便可以通过括号后面的数字来决定括号里的元素需要乘几倍数。遇到大写字母,看一下后面有没有小写字母了,然后看后面是否有数据,没有数据就默认乘1遇到右括号,继续进行即可遇到加号或者方程一开始,需要找到其后面的数字,有数字则需要相乘,没有数字则代表乘1即可代码虽然给的测试用例全部通过,但只拿到了70分,求助原创 2020-11-29 21:48:09 · 316 阅读 · 0 评论 -
CCFCSP 202006-4 1246
1246思路代码#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <string>#include <map>using namespace std;#define LL long longmap<string,int> id;const LL mod = 998244353;/原创 2020-11-21 17:13:58 · 923 阅读 · 0 评论 -
有趣的数
题目问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次。 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前。 3. 最高位数字不为0。 因此,符合我们定义的最小的有趣的数是2013。除此以外,4位的有趣的数还有两个:2031和2301。 请计算恰好有n位的有趣的数的个数。由于答案可能非常大,只需要输出答案除以1000000007的余数。输入格式 输入只有一行,包括恰好一个正整数n (4 ≤ n原创 2020-11-02 09:09:28 · 347 阅读 · 0 评论 -
二叉树遍历 二叉树推导
Problem C: 二叉树遍历题目Description二叉树的前序、中序、后序遍历的定义:前序遍历:对任一子树,先访问跟,然后遍历其左子树,最后遍历其右子树;中序遍历:对任一子树,先遍历其左子树,然后访问根,最后遍历其右子树;后序遍历:对任一子树,先遍历其左子树,然后遍历其右子树,最后访问根。给定一棵二叉树的前序遍历和中序遍历,求其后序遍历(提示:给定前序遍历与中序遍历能够唯一确定后序遍历)。Input两个字符串,其长度n均小于等于26。第一行为前序遍历,第二行为中序遍历。二叉树中原创 2020-10-26 16:46:15 · 375 阅读 · 0 评论 -
Problem B: DFS or BFS? 广度优先搜索应用
Problem B: DFS or BFS?题目Description说好了,题目不黑人。给你一个8*8的矩阵,你的初始位置是左下角方格(用’U’表示),你的目标位置是右上角的方格(用’A’表示),其余的62个方格,如果是’.’,表示这个方格为空,如果是’S’,表示这个方格有一块大石头。好了现在你开始从左下角出发,每次可以往上,下,左,右,左上,右上,左下,右下移动一个方格,或者你可以原地不动,一共九个动作方式,在你做完一个动作后,所有的大石头会往下掉一个方格(如果一个大石头的位置是(x,y),那下原创 2020-10-26 09:31:43 · 385 阅读 · 4 评论 -
走迷宫
例题:【递归入门】走迷宫Description有一个nm格的迷宫(表示有n行、m列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这nm个数据和起始点、结束点(起始点和结束点都是用两个数据来描述的,分别表示这个点的行号和列号)。现在要你编程找出所有可行的道路,要求所走的路中没有重复的点,走时只能是上下左右四个方向。如果一条路都不可行,则输出相应信息(用-l表示无路)。 请统一用 左上右下的顺序拓展,也就是 (0,-1),(-1,0),(0,1),(1,0)Input第一原创 2020-10-25 10:09:22 · 390 阅读 · 0 评论 -
算法笔记 八皇后问题
递归#include <stdio.h>#include <string.h>#include <cmath>#include <iostream>using namespace std;int tot;bool hashmap[10]={false};int pos[10]={0};int Queens[95][9];void generateQ(int index){ if(index==9){ to原创 2020-09-10 11:27:15 · 226 阅读 · 0 评论 -
算法笔记 栈的应用 简单计算器 中缀和后缀表达式
思路将输入的中缀表达式转后缀表达式遇到数字,则算出数值,直接放入队列(注意数据非仅有一位,需要计算出整个数的值)遇到运算符先判断优先级是否小于栈中top的运算符如果是,将栈中的运算符pop到队列中,直到栈中没有运算符优先级更大为止如果不是,则直接将运算符放入栈中最后如果栈中剩余运算符,则直接放入队列中计算后缀表达式,遍历队列如果为数值,则放入栈中如果为运算符从栈中pop出两个数(注意是先第二个后第一个,后进先出嘛)随后运算最后把计算完成的数放入栈中代码原创 2020-10-07 20:38:13 · 247 阅读 · 0 评论 -
CCF CSP 201403-1 相反数
从后往前遍历,使用iterator来遍历vector查找,使用erase删除已经被配对的相反数,使用pop_back继续向前推进#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(int argc, const char * argv[]) { vector<int> nums; int n=0;原创 2020-09-08 08:17:04 · 177 阅读 · 0 评论 -
CCF CSP 201403-2 窗口
唯独需要注意的是窗口需要切换#include <iostream>#include <vector>using namespace std;struct point{ int x; int y;};vector<pair<point,point>> window;vector<int> pos;int main(int argc, const char * argv[]) { int n=0,m=0;原创 2020-09-08 08:17:38 · 221 阅读 · 0 评论 -
CCF CSP 201312-2 ISBN
#include <iostream>#include <vector>using namespace std;int main(int argc, const char * argv[]) { string input; cin>>input; int count=0; long long res=0; for(int i=0;i<11;i++){ if(input[i]=='-')原创 2020-09-08 08:18:06 · 144 阅读 · 0 评论 -
CCF CSP 201312-1 出现次数最多的数
#include <iostream>#include <algorithm>#include <vector>using namespace std;int main(){ vector<int> input; int n=0; cin>>n; for(int i=0;i<n;i++){ int m=0; cin>>m; input.push原创 2020-09-08 08:17:52 · 204 阅读 · 0 评论 -
CCF CSP 202006-3 Markdown渲染器
理解对于普通文本处理文本时:去掉每行首尾的连续空格渲染时:段落和其余段落/项目列表之间空出一行超出一行大小则渲染至下一行如果余下的文本以空格开头,则删除所有空格对于列表处理列表时:删除列表之间的空白行删除开头不是两个空格的行(两个空格就代表该行最前面有一个空格)渲染时:把列表和段落/列表之间空出一行空格 星号 空格 和两个空格转换为 空格 列表点 空格每一个列表的非第一行首都要插入3个空格注意:在渲染列表时,要注意每一行只有n-3个字符代原创 2020-09-08 08:18:33 · 655 阅读 · 0 评论 -
CCF CSP 202006-2 稀疏向量
不知道为啥非vector版本不好使#include <iostream>#include <vector>using namespace std;typedef pair<int,int> values;vector<values> u;vector<values> v;int main(){ int n=0,a=0,b=0; cin>>n>>a>>b; for(int i原创 2020-09-08 08:18:41 · 289 阅读 · 0 评论 -
CCF CSP 202006-1 线性分类器
方法1数组方法#include <iostream>using namespace std;int main(int argc, const char * argv[]) { int n=0,m=0; cin>>n>>m; int* left=new int [n]; int* right=new int [n]; char* type=new char [n]; for(int i=0;i<n;i++){原创 2020-09-08 08:18:48 · 286 阅读 · 0 评论
分享