- 博客(23)
- 收藏
- 关注
原创 博客介绍贴
本人是某高校研究生新生,在本科学习阶段掌握了一定的计算机基础知识,希望在读研时期提高代码能力,掌握一定的人工智能领域的知识并能够顺利毕业。
2023-08-26 18:56:16
134
1
原创 201903-2 二十四点
201903-2 二十四点 题意描述 本题要求我们实现一个简单的计算器。 输入输出格式 输入一个n,表示要计算的字符串的个数,接下来是n个字符串 数据规模 n <= 1e2 算法设计 本题的核心类似于中缀表达式转为后缀表达式,因为计算机处理后缀表达式相当简单,只要维护一个栈即可。这里关键是如何进行转化。运算符有优先级,因此我们维护unordered_map<char,int>um来表示优先级。设置一个运算符栈op,一个运算数栈num。遍历表达式,如果是数字,直接压入运算数栈,如果是运算符,
2021-10-04 19:58:29
183
原创 最短路径总结
今天学习了《算法笔记》最短路径 最小生成树 拓扑排序部分 这里做简单总结 最短路径使用较多的是dijstra算法 基于贪心的思想 在无负边权的情况下,可以有效地求出单源最短路径,它维护d[]表示结点i到起点的距离 每次选择距离起点最近地结点访问,也就是d[i]最小的结点i进行访问,之后,使用结点i对未访问过的结点进行松弛,可以使用优先队列进行优化。在许多题目中,不会只考最短距离,一般会有第二,第三标尺,比如边权之和,点权之和,最短路径的条数等,以上这三个标尺可以在松弛过程中一并更新优化,关键是建立num[]
2021-09-05 23:35:58
618
原创 1076 Forwards on Weibo
1076 Forwards on Weibo 题意描述 给出图结构 求某个节点发出信息在层数限制下能够转发的最多人数 输入输出格式 数据规模 节点数 <= 1e3 算法设计 像这种模型最适合使用BFS来求解了。BFS搜索的过程更像是水面波纹扩散,一圈一圈的,而且第一次到达某个节点时,其扩散次数一定是最少的,由此便有BFS最短路模型,比如 一次跳两个或三格 问到达目的地要跳几次 跳的过程好比扩散搜索的过程,结构便是扩散的次数,也是就扩散的层数 还有 八数码问题 问移动几次能够到达目表状态 还有 迷宫搜索
2021-09-03 21:35:36
166
原创 1021 Deepest Root
1021 Deepest Root 题意描述 给出多个结点 求哪个结点做根结点时图的高度最高 输入输出格式 数据规模 结点的个数小于等于 1e4 算法设计 一种解法是枚举每个结点 求每个结点做根节点时图的最大高度 即从根节点出发做DFS(gg u, gg depth) 求得参数depth最大 另一种解法是使用图的直径。图的直径是指图中任意两点之间最短距离的最大值 直径有许多性质 直径能够有多条 直径的两端有多个点 从任意一点开始进行DFS 能够到达的最大深度节点一定是直径的一端,当然 相同深度的节点可能有多
2021-09-03 21:34:56
133
原创 1034 Head of a Gang(DFS)
1034 Head of a Gang(DFS) 题意描述 由通话信息来判断几人是否位于一个帮派 输入输出格式 输入通话记录 输出 帮派的个数 以及每个帮派的头目和人数 数据规模 算法设计 这里使用DFS求解,这个DFS模型是比较经典的。我们使用DFS搜索图结构时,一般函数的参数第一个是当前访问的结点编号,之后的参数便是问题的信息,注意,这些参数一般是引用型的,会随着搜索实时更新,引用主函数变量,而且一经绑定便不会变化。函数处理的逻辑是 先将flag[i] 置true 表示 这个结点已经访问 若不置true
2021-09-03 19:45:18
154
原创 1034 Head of a Gang(并查集)
1034 Head of a Gang 题意描述 由通话信息来判断几人是否位于一个帮派 输入输出格式 输入通话记录 输出 帮派的个数 以及每个帮派的头目和人数 数据规模 算法设计 这里采用并查集的做法。首先建立并查集数组unordered_map<string,string>ufs 再维护每个人的权重 unordered_map<string,gg>weight 最后 由于题目要求按头目字典序升序输出 故用 map<string,array<gg,2>>res
2021-09-03 12:19:41
201
原创 201609-3 炉石传说
201609-3 炉石传说 题意描述 本题要求我们去模拟一款游戏的运行,游戏分为双方 轮流操作 操作共有三种形式 summon attack end 输入输出格式 输入 n 接下来是 n 个操作 每个操作由字符串区分 后面是操作对应的参数 操作过后 先输出胜负情况 之后输出双方英雄及随从的血量 数据规模 n <= 1e3 算法设计 既然是模拟题 那就要寻找数据表示 读题可知 无论是英雄 还是 随从 均有攻击力 血量 故考虑用 unordered_map<gg,vector<array<
2021-09-02 20:38:10
189
原创 201609-2 火车购票
201609-2 火车购票 题意描述 依次输入购票的数量 输出购买票的编号 输入输出格式 输入 n 个数 依次为购票的数量 输出购得票的编号 数据规模 n <= 1e2 算法设计 我们要设计一个简单的购票系统 就是模拟这个购票的流程。考虑到火车共有20排,每排有5个座位 故我们用vector<gg>train(20,5) 来维护信息 数组下标为排编号 从 0 开始 数组值为这排剩余座位数 而且题目中多次强调从小到大 而且 连续 所以 若从 i排开始买票 第一张票的编号就是 i * 5 +
2021-09-02 20:36:59
166
原创 201609-1 最大波动
201609-1 最大波动 题意描述 给出 n 个数 求两两之间差的绝对值最大是多少 输入输出格式 输入 n 和 n 个整数 输出最大的差的绝对值 数据规模 n <= 1e3 算法设计 我们可以记录前驱 边读入边处理即可 c++11代码 #include <bits/stdc++.h> using namespace std; using gg = long long; int main() { ios::sync_with_stdio(false); cin.tie(0);
2021-09-02 20:35:58
118
原创 leetocde-142
142.环形链表II 题意描述 给定一个链表 需要判断链表中是否有环 并且给出环的入口 输入输出格式 输入为链表的头结点 数据规模 节点个数小于等于1e4 算法设计 最简单的思路为哈希表 这里介绍一致快慢指针的方法 快慢指针是双指针算法的一种 快指针一次走两步 慢指针一次走一步 显然 若链表中存在环 快指针一定先入环 可能绕环走了许多圈 但一旦慢指针进入环 快指针一定会与慢指针相遇 (可以以相对运动的角度考虑) 而且 满指针最多走一圈就会被快指针追上 设慢指针入环到相遇走了x 入环时 两个指针相聚 dis
2021-08-25 17:44:54
113
原创 A1103 Integer Factorization
A1103 Integer Factorization 题意描述 给定一个整数n 将其分解为 k个正整数的p次幂之和 输入输出格式 输入 n k p 数据规模 n <= 400 k <=n p >=2 and p <7 算法设计 这个题中没有给每个正整数的取值范围 但我们可以想到 如果单个数的p次已经大于了n 显然就没必要再增大了 而且 n 小于 400 p 大于2 每个数的取值集合 不过包含16个数 搜索的思路有两种 第一种是枚举k个数 每个数都有fac.size()种可能 显然
2021-08-23 16:18:36
158
原创 CCF-CSP认证 202104-3 DHCP服务器
CCF-CSP认证 202104-3 DHCP服务器 题意描述 这次要求我们实现一个简易的DHCP服务器 我们需要处理DIS REQ 报文段 发送 NAK ACK OFR 报文段 对于每个接收到的报文段 我们需要判断该报文是否有效 若是有效的DIS 报文 我们要回复OFR 报文 报文中含有服务器编号 请求主机编号 报文类型 申请得到的IP地址 IP地址的过期时刻 若是有效的REQ报文 我们要根据目的主机的不同 以及IP地址的有效性作出不同的回复 输入输出格式 输入第一行 是服务器的配置 包含 地址池大小 普
2021-08-15 21:57:55
720
原创 CCF-CSP认证 202104-2 邻域均值
CCF-CSP认证 202104-2 邻域均值 题意描述 一副图像是由一个灰度值矩阵组成的 定义领域的概念 一个点的邻域就是指以这个点为中心 长为横坐标±r 宽为纵坐标±r 的点组成的矩阵 若这个领域内所有点的灰度值之和取均值 小于等于某个阈值t 就称这个点处于较暗区域 本题就要我们就有多少点位于较暗区域 输入输出格式 输入 n 矩阵规模 L 灰度值上限 r t 阈值 数据规模 n <= 600 算法设计 根据数据规模 感觉 3次方 算法也是可以过的 但是 依次枚举矩阵每个点 再枚举每个点邻域内的点
2021-08-15 20:57:42
790
原创 CCF-CSP认证 201912-3 化学方程式
CCF-CSP认证 201912-3 化学方程式 题意描述 给出n个化学方程式 让我们判断化学方程式是否配平 输入输出格式 输入第一行包含一个整数n表示方程式的数量 接下来是n行化学方程式 数据规模 n在[1,100] 之间 算法设计 个人认为 这应该是CSP第三题中最好读懂题意的题目了 就是给几个化学方程式 让我们去判断方程式是否配平 直接上字符串处理 但是说来容易 仔细想一想 我们需要考虑的细节还是不少的 我列出了以下需要解决的问题 以及相应的解决方案 如何去判断方程式是平的? 我们建立一张图 map
2021-08-13 22:38:42
679
1
原创 数值算法STL
在stl中提供了许多的泛型算法 在stl中 函数接受的迭代器区间均是左闭右开的 这样 右区间端点 - 左区间端点 即为区间中元素个数 也为区间的实际长度 或者使用distance()函数 它会返回[ )区间中元素的个数 即区间长度 在使用一些stl算法时,要注意其使用的条件 返回值 比如 区间合并函数 merge() 操作的两个容器要有序,第五个参数是写入位置的迭代器 必须保证容器有相应的长度 而且 它的返回值是指向有效数字的下一个 左闭右开 由此 便于我们确定结果区间的有效长度 比如 一些集合操作 s.
2021-08-12 18:58:09
149
原创 双指针算法
双指针内容总结 双指针是一种重要的算法思想 它可以通过指针的移动去除无效状态 从而简化时间复杂度 双指针问题类型 快慢指针 此类问题 通常是设置两个指针 i,j i指针负责扫描序列 j指针负责维护某些信息 结束条件为快指针扫描完整个序列 比如 删除数组重复项-2 这里i负责遍历序列,枚举元素 j负责维护写入的位置 这样 从 0 到j-1 便是数组的有效长度 再比如删除链表倒数第n个节点 设置两个指针 i j 开始两张均指向虚拟头节点 之后将j指针向右移动 n个位置 使两指针距离之间相差
2021-08-08 21:16:39
160
原创 3. 无重复字符的最长字串
3. 无重复字符的最长字串 题意描述 给定一个字符串s,请你找出其中不含有重复字符的 最长子串 的长度。 字串是连续的 输入输出格式 s = “abcabcbb” 输出为 3 最长字串为abc 长度为3 数据规模 0 <= s.length <= 5 * 1e4 算法设计 此题的解法多种多样 这里采用双指针 和 滑动窗口的解法 双指针 此题需要我们枚举可能的区间 故设计两个指针 start end start负责维护区间的左端点,end负责维护区间的右端点 开始 两个指针都指向字符串起点 en
2021-08-08 15:53:32
148
原创 1082 Read Number in Chinese
1082 Read Number in Chinese 题意描述 给一个不超过9位的数 要求输出 数在传统中文的读法 输入输出格式 输入即为一个不超过9位的十进制整数 可正可负 输出它的中文读法 两个单词之间用空格隔开 数据规模 数最多有9位 算法设计 首先 确定一个方向 我们要处理 ling的添加 数字和中文的对应 以及数字对应的权重的中文 我们可以先将数字逆序 从个位开始枚举 ,若这位数字不为0,我们将其对应的中文添加至结果向量res中 我们设立两个表 第一个表是数字中文进行转换 ,第二个表是数字的进
2021-08-05 12:19:04
125
原创 二分 模板
二分本质 二分的本质是 一个序列 具有某种性质 能将序列划分为性质不同的两部分 而二分 则可以将这两部分区间的端点求出来 举例 现有一个非递减的序列 我们要求一个数在这个序列的下标 那我们就可以将这个序列划分为两部分 一部分是 小于 这个数的 另一部分 是大于等于 这个数的 那区间端点可以理解为 大于等于这个数的第一个数的下标 那模板如下 bool check(int mid){...} int bsearch1(vector<int>& nums,int l, int r){
2021-08-05 10:06:31
101
原创 PAT-B-1024 科学计数法
1024 科学计数法 题意描述 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [±][1-9].[0-9]+E[±][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。 现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。 输入输出格式 每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。 数据规模 该数字的存储长度不超过 9999 字节,且其指数的绝对
2021-08-04 19:49:58
234
原创 B1008 数组元素循环右移问题
B1008 数组元素循环右移问题 题目 tag 模拟 题意 给定n个数 一个整数m 使得这n个数循环右移m个单位 且不开辟额外空间 解法 三次反转 先反转 [n-m,n-1] 后反转 [0,n-1] 最后 整体反转 即可 代码 #include <bits/stdc++.h> using namespace std; using gg = long long; int main() { ios::sync_with_stdio(false); cin.tie(0); int n
2021-07-30 16:00:01
107
原创 PAT B1026 程序运行时间
PAT B1026 程序运行时间 tag 简单模拟 题意描述 给出了起始时间和终止时间,单位为大小等于100 的一个数,求运行时间 。 输出格式 hh:mm:ss 对于不足一秒的时间,进行四舍五入 算法思路 思路很简单 关键是结果的四舍五入 可以使用 round() 函数,返回一个double型变量经四舍五入后的值。 代码 #include<bits/stdc++.h> using namespace std; using gg = long long ; int main(void){
2021-07-30 11:38:37
113
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人