![](https://img-blog.csdnimg.cn/9664fd5e184c4573bbc7701476056469.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法学习和刷题(acm、蓝桥杯、cf)
文章平均质量分 66
用作刷题的专栏
day by day get on
忠于自己,一生热忱
展开
-
基础算法之搜素(bfs和dfs模板和例题)
数独是一种著名的益智游戏,这里讨论的是一种简化后的数独-四阶数独,给出一个4*4的方格,每个格子只能填写1-4的整数,要求每行每列和四等分更小的正方形部分刚好都由1-4组成,每行每列,每小块不能有重复的数字出现。不需要生成所有的序列全排列,而是一一个一个地填空,保证填空的时候序列是合法的,这样就可以不用枚举很多无效序列,节约程序运行时间。之前学习了暴力枚举策略,将所有可能的情况都枚举一遍以获得最优解,但是枚举全部元素的效率如同愚公移山,无法应付数据范围稍大的情形。当在一行中读入的是两个零时,表示输入结束。原创 2023-07-15 21:20:39 · 539 阅读 · 0 评论 -
今天的杂七杂八<矩阵连乘问题>
蓝桥的一个真题链接:https://blog.csdn.net/kiwi_berrys/article/details/111186204【问题描述】给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。例如,给定三个连乘矩阵{A1,A2,A3}的维数分别是10100,1005和550,采用(A1A2)A3,乘法次数为101005+10550=7500次,而采用A1(A2A3),乘法次数为原创 2022-04-08 22:32:18 · 154 阅读 · 0 评论 -
【算法设计与分析】递归与分治策略及其应用--有重复元素的排列问题2
算法算法算法原创 2022-04-21 10:49:52 · 470 阅读 · 0 评论 -
【算法设计与分析】递归与分治策略及其应用--有重复元素的排列问题1
全排列表示把集合中元素的所有按照一定的顺序排列起来,使用P(n, n) = n!表示n个元素全排列的个数。P(n, n)中的第一个n表示元素的个数,第二个n表示取多少个元素进行排列。给定一个n个元素数组,其全排列的过程可以描述如下:(1)任意取一个元素放在第一个位置,则有n种选择;(2)再剩下的n-1个元素中再取一个元素放在第二个位置则有n-1种选择,此时可以看做对n-1个元素进行全排列;(3)重复第二步,直到对最后一个元素进行全排列,即最后一个元素放在最后一个位置,全排列结束。原创 2022-03-18 13:31:29 · 2010 阅读 · 0 评论 -
【算法设计与分析】回溯法(排序、子集和、TSP、n皇后)
第1关:排列Sample Input4 2 Sample OutputA BA CA DB AB CB DC AC BC DD AD BD C //#include<bits/stdc++.h>#include<stdio.h>//using namespace std;int m,n;int an[10010],a[10010],ck[10010];void cal(int x){ if(x==n){ for(int i =原创 2022-05-17 11:45:42 · 226 阅读 · 0 评论 -
贪心算法学习记录
qsort()中cmp函数用法:https://blog.csdn.net/m0_51627418/article/details/121246105?spm=1001.2014.3001.5502一、活动安排问题输入样例111 43 60 65 73 85 96 108 118 122 1312 14 输出样例4 分析:对每一个活动按照占用会场时间排序,其实也是按照结束时间来排序的。因为安排一个活动后,在这个活动结束时间之前,是不能在安排活动的。就可以分为结原创 2022-04-29 15:37:40 · 820 阅读 · 0 评论 -
动态规划之背包五讲(01背包、完全背包、多重背包、分组背包)总结
一、01背包(每种物品只能使用一次)题目:代码(二维数组):#include<bits/stdc++.h>using namespace std;int v[1010],w[1010];int f[1010][1010]; //属性是: 存的价值和int main(){ int n,m; cin>>n>>m; for(int i = 1; i <= n;i++) cin>>v[i]>>w[i];原创 2022-03-31 22:06:52 · 383 阅读 · 0 评论 -
算法——大数模拟、高精度模板(究极基础)
高精度加法可以测试的题目:https://www.luogu.com.cn/problem/P1601模板代码:#include<bits/stdc++.h>using namespace std;//加法const int N = 1e6 + 10;//C = A + B; vector<int> add(vector<int> &A,vector<int> &B){ vector<int> C; int t原创 2022-03-06 17:25:23 · 619 阅读 · 0 评论 -
第十三届蓝桥杯省赛第一场个人题解(2022年)
目录试题 A: 九进制转十进制(5分)试题 B: 顺子日期(5分)试题 C: 刷题统计(10分)试题 D: 修剪灌木(10分)试题 E: X 进制减法(15分) dfs出来了!万岁试题 F: 统计子矩阵(15分)试题 A: 九进制转十进制(5分)答案:1478代码:#include<bits/stdc++.h>using namespace std;int main(){ long long ans = 2*1+2*9+0*pow(9,2)+2*pow(9,3); co原创 2022-05-13 08:37:02 · 873 阅读 · 0 评论 -
第十二届蓝桥杯省赛题解(时间显示、砝码称重)
一、时间显示(单位换算)题目:小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从 1970 年 1 月 1 日 00:00:00 到当前时刻经过的毫秒数。现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要显示出时分秒即可,毫秒也不用显示,直接舍去即可。给定一个用整数表示的时间,请将这个时间对应的时分秒输出。输入格式输入一行包含一个整数,表示时间。输出格式输出时分秒表示的当前时间,格式形如 HH:MM:SS,其中 HH 表示时原创 2022-03-30 22:03:46 · 315 阅读 · 0 评论 -
第十一届蓝桥杯国赛题解A~D
所有题目链接:https://acm.sicnu.edu.cn/contest/99/problems目录美丽的2(5分)扩散(10分)阶乘约数(10分)美丽的2(5分)题目:思路:直接一个一个找就行了 easy代码:#include<bits/stdc++.h>using namespace std;bool check(int x){ while(x){ int res = x%10; if(res == 2) return 1; x /= 10; }原创 2022-03-28 08:43:09 · 1044 阅读 · 0 评论 -
矩阵距离(有多个起始状态的flood——fill问题)
就是在bfs开始之前,把初始的所有起始状态都压入队列中。蓝桥的国赛那栋道扩散也是每一个位置 到1的最短距离把每一个1 为起点根据bfs逐层搜索的性质,BFS的过程就相当于每个起点先扩展1层,2层,3层,以此类推。所以当每个位置(x,y)第一次被访问时,就相当于距离它最近的那个起点扩展到了它,此时从那个起点到(x,y)经历的步数就是最短距离B【x】【y】。原创 2022-02-23 20:28:37 · 135 阅读 · 0 评论 -
第十一届蓝桥杯(国赛)——扩散(多源bfs广搜)
描述小蓝在一张无限大的特殊画布上作画。这张画布可以看成一个方格图,每个格子可以用一个二维的整数坐标表示。小蓝在画布上首先点了几个点:(0, 0)(2020, 11)(11, 14)(2000, 2000)只用这几个格子上有黑色,其他位置都是白色的。每过一分钟,黑色就会扩散一点。具体的,如果一个格子里面是黑色,它就会扩散到上、下、左、右四个相邻的格子中,使得这四个格子也变成黑色(如果原来就是黑色,则还是黑色)请问,经过 20202020 分钟后,画布上有多少个格子是黑色的。此题为原创 2022-02-23 10:31:09 · 252 阅读 · 0 评论 -
SICNU-ACM第一次蓝桥选拔模拟赛(acm血泪史~~~~)
acm血泪史~~~~J 题 奖杯争夺赛A.(填空题)冒泡 计算交换次数B. (填空题)手指计数C.(填空题)欢欢不想爆零D.斐波拉七E. (填空题)神奇汉诺塔太烦了 真的真的真的 为啥要在危险的地方蹦跶嘛!!!比赛补题链接比赛成绩J 题 奖杯争夺赛先说说这个题!!!!(原题在今年的上海理工蓝桥练习赛)链接蓝桥 属于常考的 DP题目真的 我一看 不就是动归嘛 还是太狂妄 太大意了竟然觉得 f【-1】【0】这样的 也没啥 完全不觉得在超限的范围 要遭如果有i-1 那原创 2021-11-23 09:44:49 · 506 阅读 · 2 评论 -
SICNU_ACM第二次天梯赛选拔
8421 BCD码是最基本和最常用的BCD码,它和四位自然二进制码相似,各位的权值为88、44、22、11,故称为有权BCD码。和四位自然二进制码不同的是,它只选用了四位二进制码中前1010组代码,即用00000000~10011001分别代表它所对应的十进制数,余下的六组代码不用。现在给你一个BCD码,你需要计算它的十进制真值。当BCD码长度不是 44 的倍数时,你需要给它加上前缀 00 使得它能够每 44 位一组转化为十进制数。原创 2022-03-21 16:48:11 · 472 阅读 · 2 评论 -
链表去重问题(怎么就超时了啊解决endl)
链表去重:https://pintia.cn/problem-sets/1497870867886116864/problems/1497870914212204608#include<bits/stdc++.h>#include<iostream>using namespace std;typedef struct node{ string addr; int val; string next;}node;node save[100010],d原创 2022-04-22 15:27:36 · 70 阅读 · 0 评论 -
L2-005 集合相似度 (25 分)(set不重复有序集合用法)
给定两个整数集合,它们的相似度定义为:Nc /Nt ×100%。其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。输入格式:输入第一行给出一个正整数N(≤50),是集合的个数。随后N行,每行对应一个集合。每个集合首先给出一个正整数M(≤104),是集合中元素的个数;然后跟M个[0,10^9^]区间内的整数。之后一行给出一个正整数K(≤2000),随后K行,每行对应一对需要计算相似度的集合的编号(集合从1到N编号)。数字间以空格分隔原创 2022-03-16 21:16:39 · 111 阅读 · 0 评论 -
L1-050 倒数第N个字符串 (15 分)andL1-054 福到了 (15 分)
给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增。例如当 L 为 3 时,序列为 { aaa, aab, aac, ..., aaz, aba, abb, ..., abz, ..., zzz }。这个序列的倒数第27个字符串就是 zyz。对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串。原创 2022-03-11 08:53:35 · 302 阅读 · 0 评论 -
L1-043 阅览室 (20 分)andL1-048 矩阵A乘以B (15 分)
天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。注意:由于线路偶尔会有故障,可能出现不完整的纪录,即只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可能被一位读者借阅。输入格式:输入在第一原创 2022-03-08 13:13:11 · 112 阅读 · 0 评论 -
L1-025 正整数A+B (有一个很溜的做法)、L1-059 敲笨钟 (20 分)字符串处理
直接读入一行然后再对 读入的字符串进行处理由于题目中没有说a是不是空串 而且还要处理空格 而且gets有的时候不能用所以 直接读入一行字符串 然后以空格为分隔 最为妥当原创 2022-03-03 14:35:18 · 166 阅读 · 2 评论 -
L1-002 打印沙漏 (20 分)、L1-006 连续因子 (20 分)PTA是真的的坑(暴力合集)
L1-002 打印沙漏 (20 分)本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印***** *** * ********所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。输入格式:输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。输出格式:首先原创 2022-02-27 15:36:29 · 155 阅读 · 1 评论 -
C++中STL用法大集合
是所有容器都有的,时间复杂度是O(1)的 因为有一个地方专门存 长度.clear()函数 不是所有容器都有的 队列就没有倍增思想:系统为某一个程序 分配空间时 所需的时间 与所需分配空间的大小 基本无关但是 时间与请求分配的次数有关所以边长数组要尽量较少申请次数 即是是浪费空间所以直接 倍增地分配空间 每次数组长度不够的时候 直接把数组长度乘以2原创 2022-01-26 22:02:45 · 136 阅读 · 2 评论 -
PAT (Advanced Level) Practice(1~9)
PAT--Advanced Level--Practice1001 A+B Format1002 A+ B for Polynomials1003 Emergency1004 Counting Leaves1005 Spell It Right1006 Sign In and Sign Out1007 Maximum Subsequence Sum1008 Elevator1009 Product of Polynomials1010 Radix1011 World Cup Betting1012 The原创 2021-10-07 01:25:02 · 229 阅读 · 0 评论 -
并查集练习题合集
世界上 比金钱个更可贵的是知识,比知识更可贵的是,好奇心。加油!并查集练习题合集一、基础用法回归二、简单并查集一、基础用法回归并查集 : 合并两个集合 或者查询一个元素是否在集合中题目:二、简单并查集三、...原创 2022-01-16 21:22:44 · 2115 阅读 · 0 评论 -
二分例题合集
”有单调性 一定能二分没有单调性的也不是不可以。“ ---y总原创 2022-01-13 14:47:46 · 505 阅读 · 0 评论 -
KMP与题目练习
最长相等前后缀是决定我们移位的关键而且next数组的数值只与子串本身有关。所以next[i]=j,含义是:下标为i 的字符前的字符串最长相等前后缀的长度为j。练手写法#include<iostream>using namespace std;int ne[1000010];typedef struct{ char data[100010]; int length;}Sstring; //串的数据结构//Sstring 是串的数据结构//typedef重命名结构体变量,可以原创 2021-10-31 17:22:05 · 284 阅读 · 0 评论 -
数据结构与算法基础篇(三) 哈希表、字符串哈希
介绍:哈希表又称散列表,一般由==哈希(散列)函数与链表结构==共同实现。用哈希函数把复杂信息映射到一个容易维护的值域里。与离散化的思想类似。离散化是极其特殊的 哈希方式因此也会存在冲突,所有有处理冲突的方式。比如:拉链法,开放寻址法。原创 2022-01-21 23:22:37 · 928 阅读 · 0 评论 -
数据结构与算法基础篇(二)trie树、并查集、堆
数据结构与算法基础篇(二)一、 tries树内容:trie、并查集和堆手写堆可以删除任意一个数 和 修改任意一个元素的操作(主要用在 迪杰斯特拉里)一、 tries树用来高效地存储 查找 字符串集合的数据结构(一般字符串的 类型 不会很多)如题:...原创 2021-11-11 17:56:26 · 664 阅读 · 0 评论 -
数据结构与算法基础篇(一)链表、栈、队列、KMP
内容1.链表与邻接表2.栈与队列3.kmp一、链表数组模拟构造 静态链表#include<iostream>//算法 不是工程 所以就可以不怕内存泄露using namespace std;//head 头节点的下标//e[]值 ne[] 结点i的next指针 即i.next//idx当前待插入的位置,即当前已经用到哪个点了const int N = 100010;int head,e[N],ne[N],idx;//初始化 用-1 表示空 所以原创 2021-10-20 22:15:09 · 357 阅读 · 0 评论 -
快排
快排及其应用前言一、快排是什么?二、使用步骤1.快排模板2.第k个数AC代码3.总结前言快速排序与归并排序都是两个很重要的排序算法。其平均时间复杂度都是nlogn。在数字很大的情况下,sort可能要超时。比如第k个数,逆序对问题。2333,这里必卡sort。一、快排是什么?快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。二、使用步骤1.快排模板代码如下(示例):#inc.原创 2021-04-10 22:07:29 · 214 阅读 · 1 评论 -
Codeforces Round #701 (Div. 2) A. Add and Divide
学习记录文章目录学习记录前言题目地址:题意解析AC代码前言被蓝桥杯????傻了的孩子终于来更新博客了题目地址:来一个还热乎的cf:Codeforces Round #701 (Div. 2) A. Add and Dividehttps://codeforces.com/contest/1485/problem/A题意解析题意: 给出a和b两个正整数,每一步只能a=a/b或b=b+1;问最少需要多少步才能使a=0或(a < b)突破点:因此该题的突破点就在于寻找界定标准。原创 2021-04-23 00:48:07 · 104 阅读 · 0 评论 -
Educational Codeforces Round 125 (Rated for Div. 2) C题
C. Bracket Sequence Deletion题目链接:https://codeforces.com/contest/1657/problem/C读题的时候属实没看懂题题意:给一个只含有’)’ 、’('两种符号的字符串(长度[1 , 5·105]),每次删除字符串的最小完美前缀,问这个字符串最多被删多少次(即最大的操作次数)和操作结束后还剩余的字符数目。最小完美前缀的解释为,至少满足下面一个条件:1.为一个合法的括号序列2.为至少有两个字符的回文字符串input:52(原创 2022-03-23 22:33:39 · 669 阅读 · 0 评论 -
Codeforces Round #739 (Div. 3)A、B、C题题解
A. Dislike of ThreesA链接A题 我自己写得好复杂好复杂,呜呜呜。第一题都写了半个小时数据范围小,判断出1到1000中的符合条件的数,用数组存下来,就可以直接按数组下标访问啦~~~~~~~~~~~~~~~~~~~~~~~~~~~~四行代码就过了 真的牛啊我的复杂代码:#include<bits/stdc++.h>using namespace std;int a[2000] = {0,1,2,4,5,7,8,10,11,14};int main(){原创 2021-08-19 17:17:21 · 134 阅读 · 0 评论 -
codeforces Harbour.Space Scholarship Contest 2021-2022 (Div. 1 + Div. 2)B Reverse String
思路题意讲解,字符串s里选一个起点往右走,然后可以在某个点转向左走,走到的字符按顺序记下来。问能否按照规定的走法得到给定的字符串(t)。其实看数据范围 500 其实这个题O(n3)都不会超时的。官方题解就是py的暴力做法。这里提供一个巧妙地解法,只需要判断是否是符合构造原理的一个字符串的字串即可。#include<bits/stdc++.h>#include<string.h>using namespace std;int main(){ string s1,s2..原创 2021-07-23 22:32:05 · 170 阅读 · 2 评论 -
牛客2020除夕AK场(签到类思维题练习)
练习签到题啦 逻辑清晰原创 2022-01-31 21:11:26 · 369 阅读 · 0 评论 -
【字符矩阵的模拟和递推】川师OJ上的一个题
川师OJ上的一个题没看懂题意。去问了问出题人。出题人说,看懂样例就行。啊啊啊啊啊 哈哈 就算是网络赛的原题一定也有很多小伙伴和我一样没看懂题意吧我结合了一个博主的代码,加上自己的注释。AC代码#include<iostream>#include<cstring>using namespace std;const int N=(1<<11)+10;bool re[N][N]; //用:1表示Y ; 0表示S void tu(int u){ if(原创 2021-09-08 11:15:51 · 101 阅读 · 0 评论 -
输入输出流之string
莫名奇妙的错误这样就好了原因:博客原创 2021-10-06 22:07:35 · 79 阅读 · 0 评论 -
STL之Vector
Vector 容器浅析一、什么是vector?向量(Vector)是一个封装了动态大小数组的顺序容器(SequenceContainer)。简单的认为,向量是一个能够存放任意类型的动态数组(这跟任意其它类型容器一样)。与其它动态序列容器相比(deques, lists (链表)and forward_lists),vector在访问元素的时候更加高效(因为可以通过位置访问),在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起lists和forward_lists统一的原创 2021-08-05 18:35:37 · 123 阅读 · 0 评论 -
malloc函数碎碎记
一、数据结构的时候,动态分配内存 用到了 这句话 L.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));解释://用malloc分配一段这么LIST_INIT_SIZEsizeof(ElemType)多个字节的内存段//Elemtype这个结构体的LIST_INIT_SIZE的乘积这么大 //它返回一个指向该内存段首字节的指针变量(viod),然后把这个指针变量强制转换为ElemType*类型//再把这个经转换的指针变量赋原创 2021-10-02 11:25:15 · 785 阅读 · 2 评论