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