算法竞赛题练习
练习记录(蓝桥杯、PAT、CSP认证之类)
Jingyao2021
有技术的人很酷。
展开
-
蓝桥杯 观光铁路 莫名其妙的65分
蓝桥杯 观光铁路原题链接并没有解题思路源代码原题链接历年真题 观光铁路并没有解题思路这道题我一开始想对于每个点进行一次DFS,在到达边界时(再次回到该点):累计每条路径经过的边数,路径条数加1。然后该点的期望时间就是总边数/路径条数。但是做的时候发现我无法保证不会回头,因为是无向边,可能1->2,然后2->1,本来1->2,那可能将该边删去,防止回头,但是因为其他点的路径可能需要这条边,所以不能删去,因此没有想到更好的办法处理。然后在网上只看到了SPFA算法运用于非最短路问题的原创 2020-10-07 09:59:50 · 284 阅读 · 1 评论 -
用DFS求解蓝桥杯 分考场
用DFS求解蓝桥杯 分考场原题链接解题思路注意点源代码原题链接蓝桥杯练习系统 历年真题 分考场解题思路n最大到100,可以用深搜做。首先考虑DFS函数所需要的参数,应该有当前处理到的考生编号index,并且我们需要最少的考场数,所以当前已经使用了的考场数目room_num也应该记录。DFS函数的边界:当前处理的考生编号index大于考生数了即为边界,在全局记录最好值(历史使用最少的考场数ans),在到边界时候更新该值。DFS函数的主体部分:对于当前的考生index,先尝试能否安排进入已建的考场原创 2020-09-23 19:13:07 · 177 阅读 · 0 评论 -
用并查集解决CSP合根植物
用并查集解决CSP合根植物原题链接解题思路搜索并查集源代码没什么用的BFS100分的并查集(有路径压缩,无按秩归并)原题链接CSP 合根植物解题思路搜索刚开始看到题目就想当然的认为是一道BFS,把整个矩阵看成0,1阵,连通用1表示,谁知道我当时怎么想到,很明显这样不能区分不同的块,唯一的价值就是找了编号和行列号的关系吧。// 编号为a,则:// 行号为(a-1)/n// 列号(a-1)%n本来想了想以为不同的块用不同的数字表示也可以做,比如第一块用1 ,第二块都用2,但是并不能保证读入顺原创 2020-09-22 19:51:39 · 126 阅读 · 0 评论 -
CSP 1246,线性代数的知识还可以这么用
1, 2, 4, 6总共能组成16个不同的两位数,对于每个两位数,写出其下一秒可能的变化形态。可能的组合形式下一秒能变换出的数字11121416222421, 1626, 6421222426424441, 1646, 644142444616, 6216, 6416, 6116, 66, 646162646664, 4264, 4464, 41, 1664, 46刚开始我认原创 2020-09-09 16:55:41 · 689 阅读 · 1 评论 -
稀疏向量svector(CSP认证20年6月)
稀疏向量svector原题链接解题思路&注意点源代码评测记录原题链接CSP认证2020年6月 第二题解题思路&注意点利用map将向量u的稀疏矩阵存储在map中,对于输入的每一对向量v的(idx, value)对,判断向量u中的是否有位置为idx的值,如果有,则结果result += map_u[idx]*value;本来的源代码是:// 对于每一对输入的向量v的(idx, value)if(u.find(idx) != u.end()){ result += u[idx]*原创 2020-09-02 20:22:49 · 271 阅读 · 0 评论 -
线性分类器(CSP认证20年6月)
线性分类器原题链接解题思路源代码注意点原题链接CSP认证2020年6月第一题 线性分类器解题思路容易想到只要把点的坐标带入方程看结果与0的大小可以判断出点在直线左侧还是右侧。对于每一个方程(直线),判断的过程如下:记录下每个点的信息(包括哪一类),判断的时候先计算第一个点位于直线左边还是右边,然后看剩余的点是否和第一个点同类别:如果同类别,那么该点应该和第一个点在直线同一边如果不同类别,那么该点应该和第一个点分处于直线两侧源代码#include<iostream>usi原创 2020-09-01 21:30:16 · 835 阅读 · 0 评论 -
2019年华东师大高可信软件工程夏令营机试
2019年华东师大高可信软件工程夏令营机试A. 构造序列只是自己的想法,因为没地方测评也不能保证正确,如果有错误欢迎指正~A. 构造序列【题目】【题目解析】这道题目要我们将序列调整为不下降序列,那肯定要对相邻元素进行考虑,使任意一对相邻元素,后者都不小于前者,即观察两两元素之差。利用贪心的思想来做,对于给定的序列,观察每一对相邻的元素后者是否大于前者:如果大于等于,满足不下降就不需要调整;如果小于,那么需要将前者减少,或者将后者增大,操作次数为两元素之差。那到底是调整前者还是调整后者原创 2020-07-22 16:58:19 · 1692 阅读 · 0 评论 -
第十一届蓝桥杯大赛第二次模拟(软件类C/C++)个人总结
第十一届蓝桥杯大赛第二次模拟C/C++题目链接填空题1. 12.5MB2. 最多边数3. 单词重排4. 括号序列编程题5. 反倍数6. 凯撒加密7. 螺旋8. 摆动序列9. 通电10. 植树题目链接官网 辅导资料 2020年4月 本科组填空题1. 12.5MB【解题思路】bit是位,B是字节,1B = 8bit,除此之外任意两个都是1024的距离。所以手机的4GB内存就是4∗230=2324*2^{30} = 2^{32}4∗230=232个字节(B)【代码】//在计算机存储中,12原创 2020-05-21 21:47:00 · 522 阅读 · 3 评论 -
第十一届蓝桥杯校内模拟赛(个人总结)
第十一届蓝桥杯校内模拟赛 填空题1. 15.125GB2. 约数个数3. 叶结点数4. 数字9编程题5. 数位递增的数6. 递增三元组7. 音节判断(扫描一遍字符串)8. 长草心得体会前六题不用看填空题1. 15.125GB【解题思路】任意两个都是1024的距离。【代码】#include<iostream>using namespace std;int main(...原创 2020-04-12 20:33:31 · 1489 阅读 · 3 评论 -
出现次数最多的整数
出现次数最多的整数原题链接解题思路源代码原题链接蓝桥杯 算法训练 出现次数最多的数解题思路在输入的过程中记录当前数的次数以及上一个数,如果本次输入的数和上次的数一样,当前数次数加1,否则,当前数次数变为1;然后判断一下这个次数是否比全局最大次数大(不是大于等于,因为次数相等的情况下输出小的那个)就更新全局最大。比较坑的是样例中n有负数的情况,进行特判,如果n<=0直接退出。源代码...原创 2020-03-21 22:00:30 · 361 阅读 · 0 评论 -
Anagrams问题
Anagrams问题原题链接解题思路源代码原题链接蓝桥杯 算法训练 Anagrams问题解题思路整一个长度为26的数组存放a-z出现的次数。遍历第一个字符串,出现的每个字母对应位置的num值加1;遍历第二个字符串,出现的每个字母对应位置的num值减1;最后如果整个num数组都为0,表示满足题目条件输出Y,否则输出N源代码#include<iostream>#incl...原创 2020-03-21 21:37:57 · 105 阅读 · 0 评论 -
2的次幂表示
2的次幂表示原题链接解题思路源代码原题链接蓝桥杯 算法训练 2的次幂表示解题思路题目中提示了可以使用递归的方式,一边递归一边输出。要注意的是递归边界,当要输出的数为0, 1, 2时返回,其中1比较特殊,包括左右括号都不需要输出。源代码#include<iostream>#include<vector>using namespace std;void pr...原创 2020-03-21 21:23:26 · 129 阅读 · 0 评论 -
蓝桥杯 表达式计算
表达式计算原题链接解题思路源代码原题链接蓝桥杯 算法训练 表达式计算解题思路源代码参考算法笔记(胡凡)#include<iostream>#include<queue>#include<stack>#include<map>using namespace std;struct node{ int num; //操作数 cha...原创 2020-03-20 22:25:26 · 199 阅读 · 0 评论 -
回形取数
蓝桥杯基础训练 回形取数原题链接解题思路源代码原题链接回形取数解题思路题目说明了从矩阵左上角开始,初始方向为向下。那我们可以想到,顺着向下的方向输出直到不可再向下,然后应该往逆时针方向继续走。方向改变的顺序是下,右,上,左。于是我们写出朝这四个方向走一步的增量矩阵。int direction[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; //...原创 2020-03-16 17:38:22 · 87 阅读 · 0 评论 -
Sine之舞
Sine之舞原题链接解题思路A(n)S(n)源代码原题链接基础练习 Sine之舞解题思路利用递推,觉得混乱的话就手写几个试试。A(n)首先是输出A(n):A(1) = sin(1)A(2) = sin(1-sin(2))A(3) = sin(1-sin(2+sin(3)))…注意i从1到n每次一定要输出sin(i,然后根据i的奇偶性输出+或-号。最后输出n个右括号即可。v...原创 2020-03-10 20:26:43 · 717 阅读 · 0 评论 -
1063 Set Similarity
1063 Set Similarity原题链接解题思路源代码原题链接PAT 甲级 1063 Set Similarity解题思路给定任意两个集合,求他们的 并集的元素个数/交集的元素个数。利用STL中的unordered_set(去重但不排序,速度比set更快)可以很好的解决这题。源代码#include<iostream>#include<unordered_se...原创 2020-02-15 11:55:50 · 74 阅读 · 0 评论 -
Shopping in Mars
1044 Shopping in Mars原题链接解题思路源代码注意原题链接PAT 甲级 1044 Shopping in Mars解题思路因为必须将num数组中一段连续的序列之和拿来付钱,而 [i, j] 之间元素之和显然可以通过sum[j] - sum[i-1]得到,而sum数组是递增的,因此可以通过枚举左端点,二分数组寻找右端点的方法来求解。源代码#include<iost...原创 2020-02-08 11:30:43 · 87 阅读 · 0 评论 -
Perfect Sequence
1085 Perfect Sequence原题链接解题思路源代码原题链接PAT 甲级 1085 Perfect Sequence解题思路给定一个数p,如果一个序列满足,M≤m×p,则是完美数列,m和M分别是序列中的最大值和最小值。显然,首先对序列进行排序,完美序列一定是该序列的一个连续子序列。排好序后,从小到大枚举每个元素(不一定从首元素开始的是最长的),假定完美序列从该元素开始,此...原创 2020-02-07 16:52:34 · 435 阅读 · 0 评论 -
1038 Recover the Smallest Number
Recover the Smallest Number原题链接解题思路源代码(28分)问题原题链接PAT甲级 1038 Recover the Smallest Number解题思路我认为这题主要是想清楚如何写排序,即如何贪心的选择数字部分组成最小的数。对于两个长度相同的数字部分:字典序小的应该排在前面。例如对于23、45这两个数字部分:2345<4523。(23应该排在45前面...原创 2020-02-06 15:25:09 · 106 阅读 · 0 评论 -
一元多项式求导
1010 一元多项式求导原题链接解题思路代码原题链接PAT 乙级 1010 一元多项式求导解题思路每次读入按照系数和指数一对一起读入。主要是区分整个多项式是否为零多项式,如果每一项的指数都为0,才是零多项式,此时要注意输出 “0 0”。代码#include<iostream>using namespace std;int main(){ int a,b; bool ...原创 2020-01-17 15:01:20 · 326 阅读 · 0 评论 -
1042 Shuffling Machine
Shuffling Machine原题链接解题思路如何进行洗牌如何输出花色原题链接PAT甲级 1042 Shuffling Machine解题思路如何进行洗牌我认为要有两个数组分别存放上一次的洗牌结果和当下洗牌结果,不能一边用该数组一边又在变化这个数组(本来以为每张牌的新位置不同不会有影响,后来发现还是会出错因为要用到上一次洗牌某号位置的牌而可能此时已经在这次洗牌中变化了。)如何输出花...原创 2020-01-16 16:15:19 · 112 阅读 · 0 评论 -
最小生成树(prim贪心算法)
**【问题描述】**Prim算法解决的是带权重的无向图上连接所有顶点的耗费最小的生成树。**【输入形式】**在屏幕上输入顶点个数和连接顶点间的边的权矩阵。**【输出形式】**从源到各个顶点的最短距离及路径。【样例输入】80 15 7 0 0 0 0 1015 0 0 0 0 0 0 07 0 0 9 12 5 0 00 0 9 0 0 0 0 00 0 12 0 0 6 0 0...原创 2019-12-12 00:17:04 · 796 阅读 · 0 评论 -
优先队列搜索算法求解TSP问题(搜索算法)
【问题描述】采用优先队列搜索算法求解TSP问题,用一最小堆来存储活结点表,其优先级是结点的当前费用。并在搜索过程中,使用界限条件(当前结点已经走过的路径长度要小于已求得的最短路径)进行“剪枝”操作(不再对后续结点进行遍历),从而提高搜索效率。采用heapq模块来实现最小堆。【输入形式】在屏幕上输入顶点个数和连接顶点间的边的邻接矩阵。【输出形式】搜索过程,最优值和其中一条最优路径。【样例输入】...原创 2019-12-12 00:19:26 · 1200 阅读 · 0 评论 -
深度优先搜索算法求解TSP问题
**【问题描述】**采用深度优先搜索算法求解TSP问题,并在搜索过程中,使用界限条件(当前结点已经走过的路径长度要小于已求得的最短路径)进行“剪枝”操作(不再对后续结点进行遍历),从而提高搜索效率。采用queue模块中的栈(LifoQueue)来实现深度优先搜索。**【输入形式】**在屏幕上输入顶点个数和连接顶点间的边的邻接矩阵。**【输出形式】**最优值和其中一条最优路径。【样例输入】4...原创 2019-12-12 00:18:05 · 1544 阅读 · 1 评论 -
python实现Dijkstra算法
单源最短路径(贪心算法)—单源最短路径(贪心算法)【问题描述】Dijkstra算法解决的是带权重的有向图上单源最短路径问题。所有边的权重都为非负值。设置顶点集合S并不断地作贪心选择来扩充这个集合。使用最小堆数据结构构造优先队列。【输入形式】在屏幕上输入顶点个数和连接顶点间的边的权矩阵。【输出形式】从源到各个顶点的最短距离及路径。【样例输入】50 10 0 30 1000 0 50 0...原创 2019-12-12 00:19:40 · 569 阅读 · 1 评论 -
哈夫曼编码(python实现)
【问题描述】使用贪心算法求解Huffman编码问题,具体来说就是,根据每个字符的出现频率,使用最小堆构造最小优先队列,构造出字符的最优二进制表示,即前缀码。在程序开始说明部分,简要描述使用贪心算法求解Huffman编码问题的算法过程。【输入形式】在屏幕上输入字符个数和每个字符的频率。【输出形式】每个字符的Huffman编码。【样例输入】645 13 12 16 9 5【样例输出】a ...原创 2019-12-12 00:19:46 · 843 阅读 · 0 评论 -
0-1背包问题(动态规划 python实现)
【问题描述】使用动态规划算法解0-1背包问题,具体来说就是,依据递归式,按照顺序求得子问题,使得选择合适物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。【输入形式】在屏幕上输入背包容量、物品数量、每件物品价值和重量。【输出形式】最优解时所选物品编号。【样例输入】1056 3 5 4 62 2 6 5 4【样例输出】1 2 5【样例说明】输入:背包容量10、物...原创 2019-12-12 00:17:16 · 476 阅读 · 0 评论 -
凸多边形最优三角剖分
【问题描述】使用动态规划算法解凸多边形最优三角剖分问题,具体来说就是,依据递归式,按照顺序求得子问题,使得该三角剖分中诸三角形上权之和为最小。【输入形式】在屏幕上输入凸多边形顶点个数和顶点坐标。【输出形式】最优三角剖分后的三角形顶点。【样例输入】78 260 200 1010 022 1227 2115 26【样例输出】012234024456046【样例说明】...原创 2019-12-12 00:19:04 · 341 阅读 · 0 评论 -
最大字段和(分治与递归)
【问题描述】使用分治递归算法解最大子段和问题,具体来说就是,将序列分为长度相等的左右两段,分别求出这两段的最大子段和,包含左右部分子段的最大子段和,求这三种情况得到的最大子段和的最大值。【输入形式】在屏幕上输入一个序列元素,包含负整数、0和正整数。【输出形式】序列的最大子段和,及得到最大子段和时的起始和终止编号。【样例输入】-2 11 -4 13 -5 -2【样例输出】2024【...原创 2019-12-12 00:20:16 · 321 阅读 · 0 评论 -
最长公共子序列(动态规划)
**【问题描述】**使用动态规划算法解最长公共子序列问题,具体来说就是,依据其递归式,自底向上的方式依次计算得到每个子问题的最优值。**【输入形式】**在屏幕上输入两个序列X和Y,序列各元素数间都以一个空格分隔。**【输出形式】**矩阵c,其中c(i,j)中存放的是:序列Xi = {x1, …, xi}和序列Yj = {y1, …, yj}的最长公共子序列的长度。序列X和Y的最长公共子序列。...原创 2019-12-12 00:18:51 · 203 阅读 · 0 评论 -
动态规划算法解矩阵连乘
当前编程题:动态规划算法解矩阵连乘(动态规划)—动态规划算法解矩阵连乘(动态规划)【问题描述】使用动态规划算法解矩阵连乘问题,具体来说就是,依据其递归式自底向上的方式进行计算,在计算过程中,保存已子问题答案,每个子问题只解决一次,在后面计算需要时只要简单查一下得到其结果,从而避免大量的重复计算,最终得到多项式时间的算法。【输入形式】在屏幕上输入矩阵连乘个数,和第1个矩阵的行数和第1个矩阵...原创 2019-12-12 00:17:57 · 575 阅读 · 0 评论 -
全排列问题(递归与分治)Python实现
全排列问题(递归与分治)【问题描述】对n个整数进行全排列【输入形式】在屏幕上输入若干个整数,各数间都以一个空格分隔。【输出形式】按照顺序每行输出一种排列方式【样例输入】1 2 3【样例输出】[1 2 3][1 3 2][2 1 3][2 3 1][3 2 1][3 1 2]【样例说明】输入:三个整数,分别为1,2,3,以空格分隔。输出:按照顺序每行输出一种排列方式,以...原创 2019-12-12 00:18:32 · 696 阅读 · 0 评论 -
快速排序(递归与分治)
快速排序(递归与分治)【问题描述】每次划分时都以最后一个元素为划分基准,使用快速排序算法对若干整数进行排序。【输入形式】在屏幕上输入若干整数,各数间都以一个空格分隔。【输出形式】输出每次划分的基准元素和该数在划分后的数组中的位置,以及从小到大的排序结果。【样例输入】48 38 65 97 76 13 27【样例输出】27 138 265 476 5[13 27 38 48 6...原创 2019-12-12 00:19:54 · 406 阅读 · 0 评论 -
线性时间内寻找第k小的数
当前编程题:线性时间内寻找元素—线性时间内寻找元素(递归与分治)【问题描述】每次都是优化选出一个元素为划分基准,在线性时间内寻找第i小元素。【输入形式】在屏幕上输入若干整数,各数间都以一个空格分隔。再输入要寻找的元素是数组从小到大顺序中第几个位置。【输出形式】数组从小到大顺序中要寻找的那个位置的元素。【样例输入】2 9 8 0 7 10 1 12 3 14 5 13 6 11 4...原创 2019-12-12 00:20:05 · 337 阅读 · 0 评论 -
CCF窗口
CCF 推荐系统原题链接解题思路C/C++代码原题链接链接: 官网链接解题思路整一个全局数组area,里面存放该位置处的最顶层的窗口编号;整一个结构体数组window,结构体Window里存放每一个窗口的x1, y1, x2, y2;读入时遍历这一块area,将其设为窗口的编号;对于每次鼠标点击的坐标(x,y),area[x][y]就是该位置最顶层的窗口编号了,直接输出area[x]...原创 2019-12-08 08:42:51 · 265 阅读 · 0 评论 -
ccf201803-2碰撞的小球
CCF 推荐系统原题链接解题思路小球信息怎么处理如何实时处理小球位置C/C++代码原题链接链接: 官网链接.解题思路由题意知道,只可能出现两个小球相碰撞的情况,但是要注意,可能会出现同一时刻多对小球碰撞的情况。小球信息怎么处理我们需要记录每一个小球所在的位置pos,小球的速度speed(1或者-1),那么下一时刻小球的位置就是pos+speed。考虑到只有相邻的小球可能碰撞,因此将小球...原创 2019-11-17 23:08:46 · 112 阅读 · 0 评论 -
CCF201909-4推荐系统
CCF 推荐系统原题链接解题思路输入部分输出部分商品怎么存怎么选商品C++代码原题链接http://118.190.20.162/view.page?gpid=T91是2019年9月份的第四道真题。解题思路又是一道题目又臭又长的题,当然,还是要耐着性子看。我这么粗心的人竟然过了真的感动哭了,只要细心就可以过的,没什么算法的技巧。大概就是熟练使用STL吧。输入部分第一行:m类商品,初始...原创 2019-11-15 16:36:31 · 439 阅读 · 0 评论 -
校门外的树
总时间限制: 1000ms 内存限制: 65536kB描述某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有...原创 2018-10-11 22:09:58 · 103 阅读 · 0 评论 -
年龄与疾病
总时间限制: 1000ms 内存限制: 65536kB描述某医院想统计一下某项疾病的获得与否与年龄是否有关,需要对以前的诊断记录进行整理,按照0-18、19-35、36-60、61以上(含61)四个年龄段统计的患病人数占总患病人数的比例。输入共2行,第一行为过往病人的数目n(0 < n <= 100),第二行为每个病人患病时的年龄。输出按照0-18、19-35、36-60、...原创 2018-10-11 22:14:13 · 348 阅读 · 0 评论 -
陶陶摘苹果
总时间限制: 1000ms 内存限制: 65536kB描述陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。输入包括两行...原创 2018-10-11 22:18:30 · 74 阅读 · 0 评论