我的算法学习之路
陆oz
越努力,越幸运
展开
-
Leetcode1044. 最长重复子串(二分查找 + Rabin-Karp 字符串编码)思路分享-日常总结
Leetcode1044. 最长重复子串(二分查找 + Rabin-Karp 字符串编码)思路分享-日常总结思路:刚看到这题的时候脑子里只有暴力做法(bushi)后来看了一下各路大佬的题解 发现并看不懂 (字符串哈希+二分)说明前置知识还不够然后我学习了一点点前置知识如下:Rabin-Karp算法概述关于Rabin-Karp算法Rabin-Karp是用来解决字符串匹配(查重)的问题的。这个问题如下表达:Input : 字符串p,和字符串qOutput:如果p中包含q,则输出True;如原创 2021-12-23 16:30:02 · 553 阅读 · 0 评论 -
PAT甲级真题 排序问题题解归纳(C++)
PAT甲级真题 排序问题题解归纳(C++)1.PAT甲级真题1012题-最佳排名注意四舍五入C++代码#include <iostream>#include <cstring>#include <algorithm>#include <cmath>#include <unordered_map>using namespace std;struct stu{ string number; double C,ma原创 2021-08-13 11:07:12 · 373 阅读 · 0 评论 -
每日一题 春季 Day 01(反转链表)
每日一题 春季 Day 01 (反转链表篇)AcWing 35. 反转链表定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表操作 迭代版本/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Sol原创 2021-03-18 23:11:43 · 115 阅读 · 0 评论 -
洛谷 P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题
洛谷 P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题1.最大公约数和最小公倍数的乘积就是原两个数的积2.欧几里得算法 又叫辗转相除法 求最大公约数#include<iostream>#include<stdio.h>#include<math.h>using namespace std;//朴素方法的原理://枚举一个数,判断它能否被读入的两个数的积整除,//如果可以再判断它和两个数的积除以它所得的数//的最大公约数和读入的最大原创 2021-03-18 23:09:28 · 341 阅读 · 0 评论 -
琦琦的彩虹糖
琦琦的彩虹糖网友问我的一道题 不知套题目名字 就叫:琦琦的彩虹糖吧)题目难度不高 主要考察stack的应用摘录的原因是储存栈中最大值的方法很好,压栈的时候push value的同时还push max 这样就可以一直保持stack top的值是最大值 这个思路非常好 (之前在leetcode上有看过类似题解 之后没用过就忘了 这次赶紧摘录)!网友的题解(帮网友改过代码之后 只能过80%测试点 实在是不知道怎么能优化 据说最后一个测试点是超时了),要是有网友看到这题 有压缩时间的改进思路 希望能留原创 2021-03-16 21:36:38 · 398 阅读 · 0 评论 -
Acwing 2067 走方格
Acwing 2067 走方格在平面上有一些二维的点阵。这些点的编号就像二维数组的编号一样,从上到下依次为第 1 至第 n 行,从左到右依次为第 1至第 m列,每一个点可以用行号和列号来表示。现在有个人站在第 1行第 1列,要走到第 n 行第 m 列。只能向右或者向下走。注意,如果行号和列数都是偶数,不能走入这一格中。问有多少种方案。输入格式输入一行包含两个整数 n,m。输出格式输出一个整数,表示答案。数据范围1≤n,m≤30输入样例1:3 4输出样例1:2输入样例2:原创 2021-03-11 13:18:53 · 387 阅读 · 0 评论 -
进制转换总结+蓝桥历届试题小计算器
进制转换总结10进制数转换成K进制数:string changetentok(long long num,int k){ while(num!=0){ int temp=num%k; num=num/k; if(temp<=9&&temp>=0) s.push_back(temp+'0'); else s.push_back(temp-10+'A'); } reverse(s.begin(),s.end()); return s;}k进制数转原创 2021-03-11 10:51:42 · 136 阅读 · 0 评论 -
leetcode 每日一题 224. 基本计算器
leetcode 每日一题 224. 基本计算器输入:"(1+(4+5+2)-3)+(6+8)"输出:23题解:class Solution {public: int calculate(string s) { stack<int> stk; int sum=0; int sgin=1; int i=0; stk.push(1); int len=s.length();原创 2021-03-10 19:39:19 · 93 阅读 · 0 评论 -
洛谷 P1115 最大子段和
洛谷 P1115 最大子段和思路第一个数为一个有效序列。如果一个数加上上一个有效序列得到的结果比这个数大,那么该数也属于这个有效序列。如果一个数加上上一个有效序列得到的结果比这个数小,那么这个数单独成为一个新的有效序列。题解:#include<iostream>#include<stdio.h>#include<algorithm>#include<math.h>using namespace std;const int N=200005原创 2021-03-10 07:54:41 · 73 阅读 · 0 评论 -
K皇后问题 Acwing 843 n-皇后问题/洛谷 P2105 K皇后
K皇后问题Acwing 843 n-皇后问题思路参考了Anish的题解我的题解:#include<iostream>#include<stdio.h>using namespace std;const int N=20;char g[N][N];bool col[N],dj[N],udj[N];int n;void dfs(int u){ if(u==n){ for(int i=0;i<n;i++){ for(int j=0;j<n原创 2021-03-09 22:46:40 · 339 阅读 · 0 评论 -
全排列题目的两种方法小结
AcWing 842. 排列数字方法一:next_permutation(a,a+n)#include<iostream>#include<stdio.h>#include<algorithm>using namespace std;int main(){ int a[10]; int n; scanf("%d",&n); for(int i=0;i<n;i++){ a[i]=i+1; } do{ for(int i=0原创 2021-03-09 22:27:37 · 67 阅读 · 0 评论 -
AcWing 801.二进制中1的个数 (暴力枚举)
AcWing 801.二进制中1的个数方法:(暴力枚举)O(nlongn)思路:对于每个数字a,a&1得到了该数字的最后一位,之后将a右移一位,直到位0,就得到了1的个数#include<iostream>#include<stdio.h>using namespace std;int main(){ int n,a; scanf("%d",&n); while(n--){ int k=0;原创 2021-03-09 15:11:21 · 140 阅读 · 0 评论 -
洛谷P4924 [1007]魔法少女小Scarlet
洛谷P4924 [1007]魔法少女小Scarlet一道关于矩阵转置的模拟、枚举、暴力题题目很良心不用考虑越界的情况。思路:因为矩阵是绕着某个中心(x,y)旋转的而且保证是正方形,为了得到正确的式子、便于理解,我们不妨设(x,y)为原点(0,0),这样稍微模拟一下就可以得到顺时针旋转90°后正方形上一点(i,j)坐标变成(j,-i),逆时针旋转90°后坐标变成(-j,i),然后枚举i,j即可。顺时针和逆时针旋转void clockwise(int x,int y,int r){//顺时针 fo原创 2021-03-09 11:09:09 · 232 阅读 · 0 评论 -
洛谷 P1009 [NOIP1998 普及组] 阶乘之和 (暴力打表解简单高精度题方法)
洛谷 P1009 [NOIP1998 普及组] 阶乘之和Python打表代码f=open(r'point.txt','w') #存入文件sum=1i=2last=1n=50while i<=n: last*=i sum+=last i+=1 #主函数 f.write('"') #上引号 f.write(str(sum)) #具体值 f.write('",') #下引号与逗号f.close提交代码#include<stdio.h>#includ原创 2021-03-08 17:08:37 · 196 阅读 · 0 评论 -
朴素Dijkstra与堆优化Dijkstra总结
朴素Dijkstra与堆优化Dijkstra总结1.朴素版dijkstra算法Dijkstra 的整体思路即进行n(n为n的个数)次迭代去确定每个点到起点的最小值 最后输出的终点的即为我们要找的最短路的距离按照这个思路除了需要存储图外(邻接矩阵)还需要存储这两个量:dist[N] //用于存储每个点到起点的最短距离st[N] //用于在更新最短距离时 判断当前的点的最短距离是否确定 是否需要更新每次迭代的过程中我们都先找到当前未确定的最短距离的点中距离最短的点int t=-1;//将t设原创 2021-03-07 12:27:28 · 2592 阅读 · 6 评论 -
洛谷P4017 最大食物链计数
洛谷P4017 最大食物链计数标签:动态规划(dp),搜索,图论,排序,深度优先搜索(DFS), 拓扑排序本蒟蒻第一次写解题思路!!仅供参考!!我的思路:先用一个二维数组记录每组输入数据的低一级和高一级的物种序号,并记录每种物种的被吃的次数,或吃其他物种的次数。然后开始搜索,搜索的过程是从最顶端食物链开始到食物链最低层。为了不超时,到每一个物种的食物链数量都保存下来了。emmm大致思路就这样 具体的看代码吧!#include<iostream>#include<stdio.h原创 2020-09-30 23:31:19 · 192 阅读 · 0 评论 -
洛谷P1092虫食算
洛谷P1092虫食算标签:搜索、数论、数学#include<iostream>#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;int n,c[4][30],v[30],a[30];void dfs(int x,int y,int t){ if (a[c[1][n]]>=0&&a[c[2][n]]>=0&&原创 2020-09-29 16:06:13 · 110 阅读 · 0 评论 -
洛谷P1019单词接龙
洛谷P1019单词接龙标签:字符串 搜索#include<iostream>#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;int n,ans;string a[22];int vis[22];void dfs(string x,int s){ ans=max(ans,s); for(int i=1;i<=n;i++){ i原创 2020-09-29 16:03:48 · 69 阅读 · 0 评论 -
洛谷P1101 单词方阵
洛谷P1101 单词方阵(我的算法学习之路)标签:字符串 搜索#include<iostream>#include<stdio.h>#include<algorithm>using namespace std;const int Maxn=110;char a[Maxn][Maxn];bool vis[Maxn][Maxn];int xx[]={1,1,1,0,0,-1,-1,-1};int yy[]={1,0,-1,1,-1,-1,1,0};s原创 2020-09-28 23:17:12 · 105 阅读 · 0 评论 -
DFS洛谷P1605 迷宫
DFS洛谷P1605 迷宫(我的算法学习之路)标签:搜索 地推 枚举,暴力#include<iostream>#include<stdio.h>#include<algorithm>using namespace std;int n,m,t,sx,sy,fx,fy,ans;bool mp[10][10];//用来存放障碍物 bool vis[10][10];int xx[4]={1,0,-1,0};int yy[4]={0,-1,0,1};vo原创 2020-09-28 23:15:39 · 84 阅读 · 0 评论 -
洛谷 P1219 [USACO1.5]八皇后 Checker Challenge
洛谷 P1219 [USACO1.5]八皇后 Checker Challenge标签:搜索 深度优先搜索(DFS) 高性能#include<iostream>#include<stdio.h>#include<algorithm>using namespace std;int n,cnt;bool lie[20];//列 bool leftxie[40];//从右上到左下 bool rightxie[40];//从左上到右下int a[20];原创 2020-09-26 17:59:23 · 95 阅读 · 0 评论 -
DFS洛谷P1706全排列问题(我的算法学习之路)
DFS洛谷P1706全排列问题标签:搜索 数论,数学 递归 深度优先搜索(DFS)#include<iostream>#include<stdio.h>#include<algorithm>using namespace std;int n;bool vis[20];int a[20];void pr(){ for(int i=1;i<=n;i++) { printf("%5d",a[i]); } printf("\n");}vo原创 2020-09-26 17:28:45 · 150 阅读 · 0 评论 -
BFS洛谷P1032字串变换(我的算法学习之路)
BFS洛谷P1032字串变换(我的算法学习之路)标签:字符串 搜索 广度优先搜索(BFS) 剪枝知识点:mp.count(k); 返回mp中键值等于k的元素的个数#include<iostream>#include<stdio.h>#include<algorithm>#include<queue>#include<map>using namespace std;map<string,int>mp;int m原创 2020-09-26 16:48:22 · 95 阅读 · 0 评论 -
BFS洛谷P1135 奇怪的电梯(我的算法学习之路)
BFS洛谷P1135 奇怪的电梯(我的算法学习之路)标签:模拟 广度优先搜索(BFS) 深度优先搜索(DFS)#include<iostream>#include<stdio.h>#include<queue>#include<algorithm>using namespace std;int ff[210];int vist[210]={0};int main(){ int n,a,b; scanf("%d%d%d",&n原创 2020-09-25 00:02:56 · 224 阅读 · 0 评论 -
BFS洛谷P1443 马的遍历 (我的算法学习之路)
洛谷P1443 马的遍历 (我的算法学习之路)标签:搜索 广度优先搜索(BFS) 队列#include<iostream>#include<stdio.h>#include<algorithm>#include<queue>using namespace std;int xx[8]={2,2,1,1,-2,-2,-1,-1};int yy[8]={1,-1,2,-2,1,-1,2,-2};int mp[405][405];struct h原创 2020-09-23 23:17:08 · 91 阅读 · 0 评论 -
洛谷P1601A+B Problem(我的算法学习之路)
洛谷P1601 A+B Problem(我的算法学习之路)标签: 高精 字符串#include<iostream>#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;int main(){ char a[1000],b[1000]; scanf("%s %s",&a,&b); int m[1000]={0},n[1000]原创 2020-09-22 22:54:40 · 90 阅读 · 0 评论 -
洛谷 P1162 填涂颜色(我的算法学习之路)
洛谷 P1162 填涂颜色(我的算法学习之路~)标签:搜索 广度优先搜索(BFS) 队列输入样例:60 0 0 0 0 00 0 1 1 1 10 1 1 0 0 11 1 0 0 0 11 0 0 0 0 11 1 1 1 1 1输出样例:0 0 0 0 0 00 0 1 1 1 10 1 1 2 2 11 1 2 2 2 11 2 2 2 2 11 1 1 1 1 1#include<iostream>#include<stdio.h>原创 2020-09-22 22:45:56 · 168 阅读 · 0 评论