CSP
文章平均质量分 61
王森ouc
计算机专业在读硕士研究生
展开
-
CCFCSP题解目录
2019年12月201912-1 报数201912-2 回收站选址201912-3 化学方程式9月201909-1 小明种苹果201909-2 小明种苹果(续)201909-3 字符换3月201903-1 小中大201903-2 二十四点201903-3 损坏的RAID52018年12月201812-1 小明上学201812-2 小明放学201812-3 ...原创 2020-02-28 12:42:59 · 551 阅读 · 2 评论 -
CSP刷题笔记
将字符串转换为整数的函数atoi(string,nullptr,base)十进制十六进制之间的转换sprintf(),详细说明见链接:sprintf原创 2020-05-20 10:03:22 · 618 阅读 · 1 评论 -
常用STL容器总结
一、vector vector容器内的元素可以通过下标访问,也可以通过迭代器访问。vector迭代器的定义方式是vector<typename>::iterator it,通过*it就可以访问vector里面的元素了。vector的迭代器允许直接加上一个整数,比如it + 3这种形式,除了string容器外,其余的常用STL容器都不支持这种写法。3 begin()函数取容器的首...原创 2020-05-16 15:32:42 · 670 阅读 · 0 评论 -
CSP 202006-1 线性分类器
题目分析原创 2020-08-02 08:19:44 · 486 阅读 · 0 评论 -
CSP 202006-2 稀疏向量
题目分析 每一个取值不等于0的维度,都可以用结构体变量来存储,其结构体的定义如下,内部成员有维度索引idx,此维度上的值val。struct Node{ int idx; int val;}vec1[500005], vec2[500005]; 题目中涉及到两个向量,并且每个向量的非零值的数量不会超过500000,因此可以用结构体数组vec1和vec2来表示这两个向量的稀疏表示。 每个向量在输入时,都是按照索引值有序的,这为我们求内积提供了很大的方便。定义两个下标索引p..原创 2020-09-10 15:00:55 · 881 阅读 · 3 评论 -
CSP201912-1报数
源代码#include <iostream>#include <string>using namespace std;int Judge(int counter) { char buff[10]; _itoa(counter, buff, 10);//将整数转成字符串 string str = buff; return str.find('7');}...原创 2020-02-04 21:17:49 · 537 阅读 · 0 评论 -
CSP201912-2回收站选址
分析思路刚开始看到n<=1000,想用一个二维数组来表示垃圾的位置,但后来发现用二维数组表示垃圾的位置是不现实的,因为位置坐标的绝对值小于等于10的9次方,这样就需要一个及其大的二维数组。后来转用结构体数组来表示垃圾的位置,结构体的定义如下。struct Trash {//结构体Trash用于存储垃圾的位置 int x; int y;};x表示垃圾的x坐标,y表示垃圾的y...原创 2020-02-05 10:53:20 · 1468 阅读 · 3 评论 -
CSP201912-3化学方程式
思路分析每输入一个方程式即处理一个方程式,这样可以减少存储开销。对输入的方程式,将其进行多次切分,首先以“=”为界限,将方程式切分为左半部分和右半部分。此操作在主函数中进行。再对这两部分,以“+”为界限分别进行切割,此时切割出来的称为基本项。此操作在如下函数中进行。void ProcessExpr(string expr,char side)对每一个基本项进行处理,首先提取出基本项的...原创 2020-02-08 08:54:44 · 2293 阅读 · 2 评论 -
CSP 201912-4 区块链
题目传送门题目分析 用邻接表vector<vector<int> > adjList(505)来存储整个网络的结构,所有节点的主链存储在vector<vector<int> >backbone(505)中。如下结构体用来存储哪个节点在什么时候向它的相邻节点发送了主链。struct SendedChain { int node; ...原创 2020-04-21 09:54:39 · 579 阅读 · 1 评论 -
CSP201909-1小明种苹果
思路由子任务说明可以知道,N和M都不会超过1000,因此可以定义一个1000*1000的整形数组来存放每一棵树的疏果情况,再定义一个大小为1000的整形数组来存放每棵树疏果前的苹果个数。二维数组每一行的所有元素相加就是此树的疏果个数的相反数,再将这个相加和与疏果前的苹果个数相加即为此树疏果后的个数。源代码#include<bits/stdc++.h>using namesp...原创 2019-09-27 21:38:11 · 1012 阅读 · 4 评论 -
CSP201909-2小明种苹果(续)
思路由子任务说明可知,每一行除了mi之外,最多有1000个数据,因此定义一个数组apple[1000]用以存放每一行的数据。因为N最大值为1000,也就是说最多有1000棵苹果树,因此定义数组drop[1000]用以存放每棵树是否有苹果掉落的信息。每当把一棵树的统计或疏果情况输入完成之后,便开始进行数据处理,包括判断此棵树是否有落果的情况发生,最后还有多少个苹果。最后对数组drop进行处...原创 2019-09-27 22:42:00 · 2243 阅读 · 0 评论 -
CSP201909-3字符画
题目分析:规定:每一个RGB称之为一个像素点,分割之后的每一块称为一块图片,例如m*n = 6*8,p*q = 1*2,那么共有48个像素点,24块图片。这道题挺坑的,明明只需要修改背景色进行,却把前景色的修改方式也告诉了你,让人误以为是通过修改前景色来改变字符的显示。其实如果理解了出题人的描述,这道题还是挺简单的。定义一个结构体用来存储每个像素点的RGB,因为每个颜色分量不会超过2...原创 2019-10-06 20:39:38 · 1789 阅读 · 2 评论 -
CSP201903-1小中大
题目要求:要求输入有序的整数序列,最多不超过100000个,从中找出最大值、最小值、中位数。题目分析:既然序列是有序的,那么最值一定出现在两端,根据输入的n是奇数还是偶数来采用不同的方法求中位数,最后注意判断中位数是否为小数即可。#include<iostream>#include<iomanip>using namespace std;int main() ...原创 2019-09-21 21:57:20 · 264 阅读 · 0 评论 -
CSP201903-2二十四点
背景二十四点是一款著名的纸牌游戏,其游戏的目标是使用 3 个加减乘除运算使得 4张纸牌上数字的运算结果为 24。题目定义每一个游戏由 4 个从 1-9 的数字和 3 个四则运算符组成,保证四则运算符将数字两两隔开,不存在括号和其他字符,运算顺序按照四则运算顺序进行。其中加法用符号 + 表示,减法用符号 - 表示,乘法用小写字母 x 表示,除法用符号 / 表示。在游戏里除法为整除,例如 2 /...原创 2019-09-22 00:23:27 · 643 阅读 · 0 评论 -
CSP201903-3损坏的RAID5
题目分析:这道题光是理解题意就花了好长时间,感觉出题人在写小说,但是把题目所描述的问题理清了之后,这道题编写起来并不难。我在看题目的时候,有一个地方绕了好长时间。题目中给举了一个n=3的例子,也就是下面这张图。这个看起来还是比较好理解的,就是图中横着的每一行算是一个组(组的概念是我自己加的,题目中并未提及此概念),每一个组中有一个校验盘(实际上一个条带),在图中是灰色的方框P,组...原创 2019-10-10 17:50:31 · 755 阅读 · 0 评论 -
CSP201812-1小明上学
题目背景 小明是汉东省政法大学附属中学的一名学生,他每天都要骑自行车往返于家和学校。为了能尽可能充足地睡眠,他希望能够预计自己上学所需要的时间。他上学需要经过数段道路,相邻两段道路之间设有至多一盏红绿灯。 京州市的红绿灯是这样工作的:每盏红绿灯有红、黄、绿三盏灯和一个能够显示倒计时的显示牌。假设红绿灯被设定为红灯 r 秒,黄灯 y 秒,绿灯 g 秒,那么从 0 时刻起,[0,r) 秒内亮红...原创 2019-10-06 21:24:50 · 179 阅读 · 0 评论 -
CSP201812-2小明放学
题目背景汉东省政法大学附属中学所在的光明区最近实施了名为“智慧光明”的智慧城市项目。具体到交通领域,通过“智慧光明”终端,可以看到光明区所有红绿灯此时此刻的状态。小明的学校也安装了“智慧光明”终端,小明想利用这个终端给出的信息,估算自己放学回到家的时间。问题描述一次放学的时候,小明已经规划好了自己回家的路线,并且能够预测经过各个路段的时间。同时,小明通过学校里安装的“智慧光明”终端,看到了出...原创 2019-08-25 11:05:17 · 268 阅读 · 0 评论 -
CSP201812-3CIDR合并
样例输入212样例输出1.0.0.0/82.0.0.0/8样例输入210/910.128/9样例输出10.0.0.0/8样例输入20/1128/1样例输出0.0.0.0/0题目分析本题目要解决的问题有如下三个:将三种IP前缀化为标准型,并选择正确的存储结构从小到大合并,需要判断一个前缀的匹配集是否为另一个前缀的匹配集的子集同级合并,需要判断...原创 2020-02-10 11:08:56 · 290 阅读 · 0 评论 -
CSP 201812-4 数据中心
题目传送门题目分析 这道题本质上是求最小生成树。 通过题目的描述,我们可以知道,要输出的结果其实是一棵树的所有边中,权值最大的那条边的权值,本题中的权值就是时间。题目输入的是一个无向图,因此它可以通过删除边来构造出很多棵不同的树,每一棵树都对应于一个最大边权值,我们的任务是从所有的树中,找出最大边权值最小的边权是多少。可以证明,最小生成树的最大边权是所有树中最小的。 点的个数最大可...原创 2020-04-24 12:11:33 · 255 阅读 · 0 评论 -
CSP201809-1卖菜
问题描述: 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜。 第一天,每个商店都自己定了一个价格。店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己和相邻商店的价格调整自己的价格。具体的,每家商店都会将第二天的菜价设置为自己和相邻商店第一天菜价的平均值(用去尾法取整)。 注意,编号为1的商店只有一个相邻的商店2,编号为n的商店只有一个相邻的...原创 2019-10-06 20:56:24 · 218 阅读 · 0 评论 -
CSP201809-2买菜
将H和W的每一个时间段都用结构体存储,所用的结构体如下struct TimeSegment { int beg; //开始的时间点 int end; //结束的时间点};结构体中包含了开始的时间点beg和结束的时间点end。用两个不同的结构体数组分别存储H和W的每个时间段,在设立两个整型变量i和j分别充当H和W和索引。对于H[i]和W[j],他们在时间轴上的相对关系有如下六种。红色代表...原创 2019-10-03 14:08:30 · 304 阅读 · 0 评论 -
CSP201809-3元素选择器
思路首先考虑数据的结构,用结构体存储结构化文档,每个结构体对象存储一行。结构体包含的内容有行号,级数,标签,id,并在结构体里定义构造函数用于对它初始化。struct Elem { int row; int level; string label; string id; Elem(int row, int level, string label, string id) : ...原创 2019-09-28 16:44:13 · 267 阅读 · 0 评论 -
CSP201803-1跳一跳
问题描述 近来,跳一跳这款小游戏风靡全国,受到不少玩家的喜爱。 简化后的跳一跳规则如下:玩家每次从当前方块跳到下一个方块,如果没有跳到下一个方块上则游戏结束。 如果跳到了方块上,但没有跳到方块的中心则获得1分;跳到方块中心时,若上一次的得分为1分或这是本局游戏的第一次跳跃则此次得分为2分,否则此次得分比上一次得分多两分(即连续跳到方块中心时,总得分将+2,+4,+6,+8…)。 现...原创 2019-10-06 21:04:38 · 196 阅读 · 2 评论 -
CSP201803-2碰撞的小球
问题描述: 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处。有n个不计体积的小球在线段上,开始时所有的小球都处在偶数坐标上,速度方向向右,速度大小为1单位长度每秒。 当小球到达线段的端点(左端点或右端点)的时候,会立即向相反的方向移动,速度大小仍然为原来大小。 当两个小球撞到一起的时候,两个小球会分别向与自己原来移动的方向相反的方向,以原来的速度大小继续移动。...原创 2019-10-03 19:05:52 · 411 阅读 · 0 评论 -
CSP201803-3URL映射
问题描述 URL 映射是诸如 Django、Ruby on Rails 等网页框架 (web frameworks) 的一个重要组件。对于从浏览器发来的 HTTP 请求,URL 映射模块会解析请求中的 URL 地址,并将其分派给相应的处理代码。现在,请你来实现一个简单的 URL 映射功能。 本题中 URL 映射功能的配置由若干条 URL 映射规则组成。当一个请求到达时,URL 映射功能会将...原创 2020-02-11 14:59:03 · 515 阅读 · 0 评论 -
CSP201712-1最小差值
问题描述 给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值。输入格式 输入第一行包含一个整数n。 第二行包含n个正整数,相邻整数之间使用一个空格分隔。输出格式 输出一个整数,表示答案。样例输入51 5 4 8 20样例输出1样例说明 相差最小的两个数是5和4,它们之间的差值是1。样例输入59 3 6 1 3样例输出0样例说...原创 2019-10-09 20:03:15 · 416 阅读 · 0 评论 -
CSP201712-2游戏
问题描述 有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向。 游戏开始,从1号小朋友开始顺时针报数,接下来每个小朋友的报数是上一个小朋友报的数加1。若一个小朋友报的数为k的倍数或其末位数(即数的个位)为k,则该小朋友被淘汰出局,不再参加以后的报数。当游戏中只剩下一个小朋友时...原创 2019-10-09 20:32:07 · 491 阅读 · 0 评论 -
CSP201712-3Crontab
题目传送门题目分析我的思路是对时间进行遍历,最开始是让时间一分钟一分钟的增加,但是进行测试的时候却超时了。后来从网上搜别人写的代码,发现原来这道题不应该从时间入手,而是应该从配置信息入手,推荐一份写的比较好的代码:传送门后来我把自己的代码进行了一些修改,也能满足题目的时间要求,下面介绍修改后的代码思路。将配置信息用结构体变量进行存储,使用的结构体如下struct Configurati...原创 2020-02-14 10:32:38 · 282 阅读 · 0 评论 -
CSP201709-1打酱油
问题描述 小明带着N元钱去买酱油。酱油10块钱一瓶,商家进行促销,每买3瓶送1瓶,或者每买5瓶送2瓶。请问小明最多可以得到多少瓶酱油。输入格式 输入的第一行包含一个整数N,表示小明可用于买酱油的钱数。N是10的整数倍,N不超过300。输出格式 输出一个整数,表示小明最多可以得到多少瓶酱油。样例输入40样例输出5样例说明 把40元分成30元和10元,分别买3瓶和1瓶,其...原创 2019-10-10 19:26:08 · 232 阅读 · 0 评论 -
CSP201709-2公共钥匙盒
点击此处跳过题目描述及说明点击此处跳转到源代码问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家。每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中。 钥匙盒一共有N个挂钩,从左到右排成一排,用来挂N个教室的钥匙。一串钥匙没有固定的悬挂位置,但钥匙上有标识,所以老师们不会弄混钥匙。 每...原创 2019-10-11 17:12:05 · 302 阅读 · 0 评论 -
CSP201709-3JSON查询
题目传送门题目分析 题目中说n<=100,每行不超过80个字符,那么输入的JSON数据总共不超过8000个字符,因此可以用一个string类型的变量存储JSON数据。 当JSON数据全部输入之后,我们得到的数据可以看成是一个object类型的,因为它是键值对的无序集合,并且用花括号进行包裹。调用void ProcessObject(int start, int end, strin...原创 2020-02-16 18:56:16 · 343 阅读 · 0 评论 -
CSP201703-1分蛋糕
问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, …, an。小明想分给每个朋友至少重量为k的蛋糕。小明的朋友们已经排好队准备领蛋糕,对于每个朋友,小明总是先将自己手中编号最小的蛋糕分给他,当这个朋友所分得蛋糕的重量不到k时,再继续将剩下的蛋糕中编号最小的给他,直到小明的蛋糕分完或者这个朋友分到的蛋糕的总重量大于等于k。 请问当小明的...原创 2019-10-15 20:17:49 · 251 阅读 · 0 评论 -
CSP201703-2学生排队
问题描述 体育老师小明要将自己班上的学生按顺序排队。他首先让学生按学号从小到大的顺序排成一排,学号小的排在前面,然后进行多次调整。一次调整小明可能让一位同学出队,向前或者向后移动一段距离后再插入队列。 例如,下面给出了一组移动的例子,例子中学生的人数为8人。 0)初始队列中学生的学号依次为1, 2, 3, 4, 5, 6, 7, 8; 1)第一次调整,命令为“3号同学向后移动2”,...原创 2019-10-15 21:11:07 · 237 阅读 · 0 评论 -
CSP201703-3Markdown
题目传送门思路分析 整体思路是每接收到一行输入就处理一行输入,不要全部接收下来再进行处理。根据题目的描述,我们可以对接收到的每一行字符串按照区块格式进行分类。分为段落、标题、无序列表和空行四种。这里需要加上空行这一种类型,因为空行是分隔两个区块的标志。在进行分类之前,先将行内结构转换成HTML形式。其实强调和超级链接单独出现时,对它们的转换是比较容易的,但是现在强调里面可能会嵌套超级链接,比...原创 2020-02-18 10:34:36 · 360 阅读 · 1 评论 -
CSP201612-1中间数
问题描述 在一个整数序列a1, a2, …, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。 给定一个整数序列,请找出这个整数序列的中间数的值。输入格式 输入的第一行包含了一个整数n,表示整数序列中数的个数。 第二行包含n个正整数,依次表示a1, a2, …, an。输出格式...原创 2020-02-08 09:46:19 · 296 阅读 · 0 评论 -
CSP201612-2工资计算
问题描述 小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资(扣除五险一金后、未扣税前的工资)为S元,则他应交的个人所得税按如下公式计算: 1) 个人所得税起征点为3500元,若S不超过3500,则不交税,3500元以上的部分才计算个人所得税,令A=S-3500元; 2) A中不超过1500元的部分,税率3%; 3) A中超过1500元...原创 2020-02-08 11:13:46 · 369 阅读 · 0 评论 -
CSP201612-3权限查询
题目传送门题目分析 题目要实现的功能是输入用户名和权限,查询输入的用户是否拥有此权限。可以看出来,与题目中描述的角色并无直接关系,但角色是从用户映射到权限的桥梁。 定义一个string类型的数组userName,用来存放所有用户的名称,当输入查询的用户名称时,先在userName中进行检索,若检索不到输入的用户名称,那么直接输出false,进行下一次查询;否则可以得到输入用户在user...原创 2020-02-20 11:05:46 · 281 阅读 · 0 评论 -
CSP201609-1最大波动
小明正在利用股票的波动程度来研究股票。小明拿到了一只股票每天收盘时的价格,他想知道,这只股票连续几天的最大波动值是多少,即在这几天中某天收盘价格与前一天收盘价格之差的绝对值最大是多少。改变以往的做法,不再是把所有数据都存储下来之后再进行遍历,而是从第二个数开始,每输入一个数,就求它和前一个数的差值,这样可以将代码的空间复杂度降到O(1)。输入的第一行包含了一个整数n,表示小明拿到的收盘价格的连续天数。第四天和第五天之间的波动最大,波动值为|3-7|=4。输出一个整数,表示这只股票这n天中的最大波动值。...原创 2020-02-24 14:28:24 · 273 阅读 · 1 评论 -
CSP201609-2 火车购票
题目传送门题目分析 一节车厢有20排,每排有五个座位,在为购票者安排座位时,从编号小的座位开始安排。基于此,定义一个一维数组int row[20]表示这二十排座位,每个元素的大小代表这一排已经有几个座位被分配出去了。比如row[6] = 3代表第七排已经有三个座位被分配出去了,还剩两个座位可用,这两个座位的编号是5 * 6 + 4 = 34和5 * 6 + 5 = 35。 在进行座位分...原创 2020-03-01 11:21:10 · 398 阅读 · 0 评论 -
CSP201609-3炉石传说
题目传送门题目分析 定义结构体变量Role用来表示游戏中的角色。struct Role { int H; //生命值 int A; //攻击力 int position; //在战场上的位置 Role() :H(30), A(0), position(0) {}; Role(int h, int a, int pos) :H(h), A(a), position(p...原创 2020-02-21 13:06:34 · 457 阅读 · 0 评论