- 博客(33)
- 收藏
- 关注
原创 暑假也要好好学习!!!
大一下转专业后,课变得特别多,没有办法抽出太多时间,要么是整天整天地上课、要么是时间被水课打得稀碎,虽然第一时间就跟着老师开始学算法,还是感觉到进步比较慢提升比较小。于是在侥幸地进了蓝桥杯国赛之后,成为了打铁选手。 在看了身边的大佬之后,本菜鸡深刻地体会到了技术的不足,于是下定决心恶补算法。开学之后补是不可能的,下学期还要继续补大一的课,估计又会没有时间。只好趁着暑假去青山校区附近租房子,和协会里考研的朋友一起利用暑假蹲一蹲图书馆,说不定还能补一补算法基础,开学了能参加PAT甲级。 几经波折租到
2021-07-15 14:03:56
161
原创 暑假PAT甲级刷题笔记Ⅰ
刷题笔记2021.7.12—2021.7.141084 坏掉的键盘关于string遍历的问题,在这个样例中,虽然在IDE中查找b[10]没有任何值,但是cout<<b[10]却不会有任何问题,cout<<b[11]就会报错为了保险起见,还是在b串的末尾加上了’#’#include<iostream>#include<algorithm>#include<string>#include<unordered_set>usi
2021-07-14 16:10:51
153
原创 蓝桥杯算法笔记<9> BFS基础
BFS是蓝桥杯中特别常用算法之前学习BFS已经有一段时间了,以至于现在实现起来还是不太熟qwq八数码:在一个 3×3 的网格中,1∼8 这 8 个数字和一个 x 恰好不重不漏地分布在这 3×3 的网格中。例如:1 2 3x 4 67 5 8在游戏过程中,可以把 x 与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为如下排列(称为正确排列):1 2 34 5 67 8 x例如,示例中图形就可以通过让 x 先后与右、下、右三个方向的数字交换成功得到
2021-04-09 21:10:07
229
原创 蓝桥杯算法笔记<8> 高精度系列
高精度加法高精度加法归根结底是一个模拟人工加法的过程大致要点如下Ⅰ.使用两个数组a,b倒序存储输入的数字,这样能比较方便地处理进位问题Ⅱ.在进行加法地过程中,使用一个指针 i 指向当前正在相加的位置,并开一个t变量存储进位Ⅲ.如果a[i]或b[i]存在,就使得t加上 a[i]或b[i]Ⅳ.向结果数组c中加入t%10Ⅴ.t=t/10 完成进位,为下一轮运算的进位作准备Ⅵ.(易错)在循环相加各个位之后,t中仍然可能有残余的数字没有加入到结果数组中,如50 + 50 这种场景,循环后c数组中为00
2021-03-29 18:06:58
121
原创 蓝桥杯学习笔记<7> 递归,递推与DFS
1.递归实现指数型枚举从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。输入格式输入一个整数 n。输出格式每行输出一种方案。同一行内的数必须升序排列,相邻两个数用恰好 1 个空格隔开。对于没有选任何数的方案,输出空行。本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。数据范围1≤n≤15输入样例:3输出样例:322 311 31 21 2 3代码:#include<iostream>#include<cstdio
2021-03-23 18:35:57
187
原创 蓝桥杯算法笔记<6>数论基础
质数,最大公约数等等和处理数字有关的题目会经常出现在算法题中。对于常见的处理方式,应该背一个最优解的模板。1.求最大公约数最大公约数:也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。在实际做题时,辗转相除法(有时也叫欧几里得算法)是最大公约数的一种常用的求法int gcd(int a,int b){ return b ? gcd(b ,a % b) : a;}...
2021-03-13 10:03:56
221
原创 蓝桥杯算法笔记<5>贪心基础
贪心的思想即在每一步中,采取某种短视的做法达到局部最优解,在完成所有步骤后,就达到了全局的最优解。这种算法属于较难的一种,既没有固定的套路/模板,而且某些贪心问题也比较难以证明,在实际做题时,需要多积累一些贪心模型,遇到实际的问题时,尽量往已经收悉的模型上靠,这样能降低一些解题难度。例题1:股票买卖题目链接:acwing.1055数据范围为十万,所以只能选用时间复杂度为n或者nlogn的算法。值得注意的是,很多贪心问题在实现的时候,都是先排序,然后再采用某种策略进行选择。(这题中并没有排序)在
2021-03-08 21:08:46
137
原创 蓝桥杯算法笔记<4>使用vector存图
图的存储有多种方式,对于稀疏图,可以用邻接表来存储,对于稠密图,可以用邻接矩阵存储在实际的考试中,使用vector(动态数组)能十分便捷地存储稀疏图例题:第四届蓝桥杯A组真题:大臣的旅费题目链接:https://www.acwing.com/problem/content/description/1209/这题中,需要存储节点数量较大, 属于稀疏图需要使用vector存图后,找到图的直径闫老板在相关讲解中,提到了如下几点:1.定义一个结构体 ,第一个点是编号,第二个是长度,这个结构体用于
2021-03-08 11:31:20
576
原创 蓝桥杯真题:完全二叉树的权值
原题链接:https://www.acwing.com/problem/content/1242/完全二叉树的权值给定一棵包含 N 个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序依次是 A1,A2,⋅⋅⋅AN,如下图所示:现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。注:根的深度是 1。输入格式第一行包含一个整数 N。第二行包含 N 个整数 A1,A2,⋅⋅⋅AN。输出格式
2021-03-07 20:49:56
250
原创 BFS基础 地牢大师
#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int N = 110;struct Point{ int x, y, z;}; Point q[N * N * N]; //用于宽搜的队列int l, r, c; //用于表示层数,行数和列数int dist[N][N][N]; //用于记录是否搜过了char g[N][N][N];
2021-03-07 20:45:42
118
原创 蓝桥杯算法笔记<3> 模拟
先引入一个例题:Acwing 1210.连号区间数小明这些天一直在思考这样一个奇怪而有趣的问题:在 1∼N 的某个排列中有多少个连号区间呢?这里所说的连号区间的定义是:如果区间 [L,R] 里的所有元素(即此排列的第 L 个到第 R 个元素)递增排序后能得到一个长度为 R−L+1 的“连续”数列,则称这个区间连号区间。当 N 很小的时候,小明可以很快地算出答案,但是当 N 变大的时候,问题就不是那么简单了,现在小明需要你的帮助。输入格式第一行是一个正整数 N,表示排列的规模。第二行是 N
2021-03-04 19:31:10
180
1
原创 蓝桥杯算法笔记<2> 基础前缀和
k倍区间给定一个长度为 N 的数列,A1,A2,…AN,如果其中一段连续的子序列 Ai,Ai+1,…Aj 之和是 K 的倍数,我们就称这个区间 [i,j] 是 K 倍区间。你能求出数列中总共有多少个 K 倍区间吗?输入格式第一行包含两个整数 N 和 K。以下 N 行每行包含一个整数 Ai。输出格式输出一个整数,代表 K 倍区间的数目。数据范围1≤N,K≤100000,1≤Ai≤100000输入样例:5 212345输出样例:6首先考虑暴力算法,枚举所有的区间,并统计符
2021-03-01 11:24:10
170
原创 蓝桥杯算法笔记<1>二分
二分算法的例题给定一个按照升序排列的长度为n的整数数组,以及 q 个查询。对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。如果数组中不存在该元素,则返回“-1 -1”。输入格式第一行包含整数n和q,表示数组长度和询问个数。第二行包含n个整数(均在1~10000范围内),表示完整数组。接下来q行,每行包含一个整数k,表示一个询问元素。输出格式共q行,每行包含两个整数,表示所求元素的起始位置和终止位置。如果数组中不存在该元素,则返回“-1 -1”。数据范围1≤n≤
2021-02-24 22:40:47
139
原创 蓝桥杯2018年C++ B组 8_日志统计
日志统计标题:日志统计小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。其中每一行的格式是:ts id表示在ts时刻编号id的帖子收到一个"赞"。现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长度为D的时间段内收到不少于K个赞,小明就认为这个帖子曾是"热帖"。具体来说,如果存在某个时刻T满足该帖在[T, T+D)这段时间内(注意是左闭右开区间)收到不少于K个赞,该帖就曾是"热帖"。给定日志,请你帮助小明统计出所有曾是"热帖"的帖子编号。【输入格式】第
2021-02-23 21:44:37
138
原创 蓝桥杯2016年C++ B组 6_方格填数
方格填数如下的10个格子 +--+--+--+ | | | |+--+--+--+--+| | | | |+--+--+--+--+| | | |+--+--+--+(如果显示有问题,也可以参看【图1.jpg】)填入0~9的数字。要求:连续的两个数字不能相邻。(左右、上下、对角都算相邻)一共有多少种可能的填数方案?请填写表示方案数目的整数。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。做这题的时候踩了审题的坑第.
2021-02-03 01:47:52
221
原创 蓝桥杯2016年C++ B组 8_四平方和
四平方和四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多4个正整数的平方和。如果把0包括进去,就正好可以表示为4个数的平方和。比如:5 = 0^2 + 0^2 + 1^2 + 2^27 = 1^2 + 1^2 + 1^2 + 2^2(^符号表示乘方的意思)对于一个给定的正整数,可能存在多种平方和的表示法。要求你对4个数排序:0 <= a <= b <= c <= d并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示.
2021-02-03 01:42:48
294
原创 蓝桥杯2015C++ B组 9_垒骰子
垒骰子赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥!我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。 atm想计算一下有多少种不同的可能的垒骰子方式。两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应数字的朝向都相同。由于方案数可能过多,请输出模 10^9 +.
2021-01-27 01:41:30
139
原创 蓝桥杯2014年C++ B组 9_地宫取宝
标题:地宫取宝 X 国王有一个地宫宝库。是 n x m 个格子的矩阵。每个格子放一件宝贝。每个宝贝贴着价值标签。 地宫的入口在左上角,出口在右下角。 小明被带到地宫的入口,国王要求他只能向右或向下行走。 走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。 当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明。 请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得.
2021-01-20 23:53:08
104
原创 蓝桥杯2014年C++ B组 8_蚂蚁感冒
蚂蚁感冒标题:蚂蚁感冒 长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。 这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把感冒传染给碰到的蚂蚁。 请你计算,当所有蚂蚁都爬离杆子时,有多少只蚂蚁患上了感冒。【数据格式】 第一行输入一个整数n (1 < n < 50), 表示蚂蚁的总数。 接着
2021-01-20 01:13:28
117
原创 蓝桥杯2014年C++ B组 7_六角填数
六角填数标题:六角填数 如图【1.png】所示六角形中,填入1~12的数字。 使得每条直线上的数字之和都相同。 图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?有意思的一道题目我使用了简单粗暴的宽搜大法六角星中的值对应xing[]下标如图:#include<iostream>#include<algorithm>using namespace std;int xing[13];bool num[13];int
2021-01-20 00:29:00
163
原创 蓝桥杯2014年C++ B组 6_奇怪的分式
奇怪的分式标题:奇怪的分式 上小学的时候,小明经常自己发明新算法。一次,老师出的题目是: 1/4 乘以 8/5 小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (参见图1.png) 老师刚想批评他,转念一想,这个答案凑巧也对啊,真是见鬼! 对于分子、分母都是 1~9 中的一位数的情况,还有哪些算式可以这样计算呢? 请写出所有不同算式的个数(包括题中举例的)。 显然,交换分子分母后,例如:4/1 乘以 5/8 是满足要求的,
2021-01-19 23:42:22
112
1
原创 蓝桥杯2014年C++ B组 3_李白打酒
标题:李白打酒 话说大诗人李白,一生好饮。幸好他从不开车。 一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱: 无事街上走,提壶去打酒。 逢店加一倍,遇花喝一斗。 这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb 就是合理的次序。像这样的答案一共有多少呢?请你计算出所有可能方案的个数(包含题目给出的)。
2021-01-19 00:06:30
106
原创 蓝桥杯2014C++ B组 1_啤酒和饮料
啤酒和饮料 啤酒每罐2.3元,饮料每罐1.9元。小明买了若干啤酒和饮料,一共花了82.3元。 我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒。 注意:答案是一个整数。请通过浏览器提交答案。 不要书写任何多余的内容(例如:写了饮料的数量,添加说明文字等)。代码:#include<iostream>#include<algorithm>using namespace std;int main(){ double su
2021-01-18 23:35:33
160
原创 蓝桥杯2013年C++ B组 9_带分数
带分数题目描述100可以表示为带分数的形式:100 = 3 + 69258 / 714,还可以表示为:100 = 82 + 3546 / 197,注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。类似这样的带分数,100有11种表示法。题目要求:从标准输入读入一个正整数N(N < 1000 * 1000)程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的全部种数。注意:不要求输出每个表示,只统计有多少表示法!例用户输入:100程序输出:11再如:用户输入:105程序
2021-01-18 01:14:35
166
原创 蓝桥杯2013年C++ B组 8_翻硬币
翻硬币小明正在玩一个“翻硬币”的游戏。桌上放着排成一排的若干硬币。我们用*表示正面,用o表示反面(是小写字母,不是零),比如可能情形是**oo***oooo,如果同时翻转左边的两个硬币,则变为oooo***oooo。现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?我们约定:把翻动相邻的两个硬币叫做一步操作,要求:程序输入:两行等长字符串,分别表示初始状态和要达到的目标状态,每行长度<1000程序输出:一个整数,表示最
2021-01-17 23:41:16
176
1
原创 蓝桥杯2013年C++ B组 7_错误票据
第七题:错误票据(4分)题目描述某涉密单位下发了某种票据,并要在年终全部收回。每张票据有唯一的ID号,全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。你的任务是通过编程,找出断号的ID和重号的ID,假设断号不可能发生在最大和最小号。要求程序首先输入一个整数N(N<100)表示后面数据行数,接着读入N行数据,每行数据长度不等,是用空格分开的若干个(不大于100个)正整数(不大于100000),每个整
2021-01-17 17:05:32
118
原创 蓝桥杯2013年C++ B组 6_三部排序
三部排序题目描述 一般的排序有许多经典算法,如快速排序、希尔排序等。但实际应用时,经常会或多或少有一些特殊要求。我们没必要套用那些经典算法,可以根据实际情况建立更好的解法。 比如,对一个整型数组中的数字进行分类排序:使得负数都靠左端,正数都靠右端,0在中部。注意问题的特点是:负数区域和正数区域内并不要求有序。可以利用这个特点通过1次线性扫描就结束战斗! 以下的程序实现了该目标。其中x指向待排序的整型数组,len是数组的长度。#include <stdio.h>vo
2021-01-17 16:29:50
82
原创 蓝桥杯2013年C++ B组 5_前缀判断
前缀判断题目描述如下的代码判断needle_start指向的串是否为haystack_start指向的串的前缀,如不是,则返回NULL。比如:"abcd1234"就包含了"abc"为前缀。char *prefix(char *haystack_start,char *needle_start) //hay_stack指向串,needle_start指向的串{ char *haystack=haystack_start; char *needle=needle_start; while(*h
2021-01-17 16:00:17
85
原创 蓝桥杯2013年C++ B组 3_39级台阶
小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!站在台阶前,他突然又想着一个问题:如果我每一步只能迈上1个或2个台阶,先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?请你利用计算机的优势,帮助小明寻找答案。要求提交的是一个整数。这题没有坑点,直接使用基础递归:#include<iostream>using namespace std;long cnt;void walk(in
2021-01-17 15:56:16
192
原创 蓝桥杯2013年C++ B组 2_马虎的算式
马虎的算式小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。有一次,老师出的题目是:36 x 495 = ?他却给抄成了:396 x 45 = ?但结果却很戏剧性,他的答案竟然是对的!!因为 36 * 495 = 396 * 45 = 17820类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)能满足形如: ab * cde = adb * ce 这样的算式
2021-01-16 16:19:55
89
原创 蓝桥杯2013年C++ B组 1_高斯日记
高斯日记第一题: 高斯日记题目描述大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记上标注着:5343,因此可算出那天是:1791年12月15日。高斯获得博士学位的那天日记上标着:8113请你算出高斯获得
2021-01-16 15:29:13
172
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人