
算法
_hys
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
6126. 设计食物评分系统
在一个有序序列中,快速删除元素、插入元素、维护序列原创 2022-07-24 17:20:28 · 324 阅读 · 0 评论 -
试题 算法提高 约数个数
问题描述 我们用D(i)表示i有多少个约数。 例如 D(1)=1 D(2)=2 D(3)=2 D(4)=3。 给定n, 求D(1)+D(2)+D(3)+...+D(n)除以1000000007(10^9+7)的余数。输入格式 一个正整数n输出格式 一行一个整数表示答案。样例输入4样例输出8数据规模和约定 N...原创 2022-07-07 17:41:26 · 249 阅读 · 0 评论 -
55. 连续子数组的最大和
连续子数组的最大和标准做法原创 2022-06-26 13:04:08 · 88 阅读 · 0 评论 -
倍增算法基础
一、倍增算法基础1、求x在数组的位置倍增算法求x在数组的位置#include<iostream>#include<algorithm>using namespace std;const int N = 500010;int a[N],n,k;int find(int x){ int l = 0,p = 1; while(p){ if(l+p < n && a[l+p] <= x){ //这个是找到等于x的数,原创 2022-05-12 12:03:14 · 461 阅读 · 0 评论 -
L2-043 龙龙送外卖 (贪心+记忆化搜索)
题目详情 - L2-043 龙龙送外卖 (pintia.cn)这题题目不好理解。思路:由于最后不用返回外卖点,通过手动模拟最短路径可以发现贪心策略就是:在最大深度那里不要返回会使总距离最小,而其他点都需要计算返回到父节点的两倍距离。那么答案就是:总距离-最大深度。每次添加订单都可能会导致这里的最大深度发生变化,所以这里就有点像dp。#include<iostream>using namespace std;const int N = 100010;int t[N], di原创 2022-04-29 20:37:18 · 2839 阅读 · 1 评论 -
L2-036 网红点打卡攻略
题目详情 - L2-036 网红点打卡攻略 (pintia.cn)先判断攻略的个数是否与网红点数相同,然后判断攻略的点是否有重复,最后计算合法的攻略距离并取最小#include<iostream>#include<vector>#include<cstring>#include<set>using namespace std;const int N = 210,INF = 0x3f3f3f3f;int n,m,idx,res = INF;原创 2022-04-29 17:08:44 · 531 阅读 · 0 评论 -
L2-016 愿天下有情人都是失散多年的兄妹
题目详情 - L2-016 愿天下有情人都是失散多年的兄妹 (pintia.cn)由于给出的一对一定是同辈的,所以他们不能存在五代以内的公共祖先,所以先dfs第一个人并标记其五代以内的祖先,然后dfs第二个人的五代以内祖先,若有某个祖先被标记过了就说明他们有五代以内的公共祖先。(然而这题的最后一个测试点数据有误,在最下面有说明)正解#include<iostream>#include<cstring>#include<algorithm>#includ原创 2022-04-29 16:24:27 · 1091 阅读 · 0 评论 -
L2-028 秀恩爱分得快
题目详情 - L2-028 秀恩爱分得快 (pintia.cn)模拟题:坑点是0的性别#include<iostream>#include<cstring>#include<algorithm>#include<vector>#include<cmath>using namespace std;const int N = 1010;bool sex[N];double q[N][N];void print(int a,原创 2022-04-29 15:15:35 · 785 阅读 · 0 评论 -
L2-029 特立独行的幸福
题目详情 - L2-029 特立独行的幸福 (pintia.cn)#include<iostream>#include<cstring>#include<algorithm>#include<vector>using namespace std;const int N = 10010;bool book[N],st[N];vector<int> ans;int num[N];bool is_prime(int x){原创 2022-04-29 11:24:27 · 211 阅读 · 0 评论 -
L2-030 冰岛人
题目详情 - L2-030 冰岛人 (pintia.cn)坑点:如果两个人有公共祖先的话那么这个祖先必须比他们的曾祖父(爷爷的父亲)辈分高。思路:由于父辈只有一个,所以可以建立一个类似链表的数据结构,如果他们有公共祖先且比他们的曾祖父(爷爷的父亲)辈分高返回true,否则返回false。如果没有公共祖先直接返回true#include<iostream>#include<set>#include<map>#define sex first#defin原创 2022-04-28 21:32:29 · 1328 阅读 · 0 评论 -
L2-040 哲哲打游戏
题目详情 - L2-040 哲哲打游戏 (pintia.cn)感觉就是阅读理解题+一些stl。#include<iostream>#include<algorithm> #include<cstring>#include<vector>#include<map>using namespace std;const int N = 100010;vector<vector<int>> g(N);int原创 2022-04-27 22:17:42 · 1824 阅读 · 0 评论 -
L2-039 清点代码库
题目详情 - L2-039 清点代码库 (pintia.cn)先用map构造pair对,然后使用再用vector构造pair对数组,最后使用sort对vector进行排序#include<iostream>#include<algorithm> #include<cstring>#include<vector>#include<map>using namespace std;const int N = 10010;map&原创 2022-04-27 21:57:29 · 366 阅读 · 0 评论 -
L2-044 大众情人
题目详情 - L2-044 大众情人 (pintia.cn)比赛的时候一眼floyd,在算样例的时候一直出错,原因是忘记判断性别是否相同。。服了#include<iostream> //l2-4#include<algorithm>#include<vector>#include<cstring>using namespace std;const int N = 510;int g[N][N];int is_man[N]; int原创 2022-04-27 14:48:51 · 397 阅读 · 2 评论 -
L2-042 老板的作息表
题目详情 - L2-042 老板的作息表 (pintia.cn)这题考察区间操作+格式输入+结构体排序,将时间化成秒来计算会比较方便#include<iostream> //ac#include<algorithm>#include<vector>using namespace std;struct Node{ int a,b; bool operator<(const Node &t) const { if(a != t.a) r原创 2022-04-27 14:01:00 · 855 阅读 · 0 评论 -
L2-041 插松枝 50行
题目详情 - L2-041 插松枝 (pintia.cn)题目写得很长,结合样例一起会比较快理解题意。本质就是阅读理解+模拟#include<iostream> //l2-1#include<algorithm>#include<vector>#include<stack> #include<deque>using namespace std;stack<int> hz;deque<int> ts原创 2022-04-27 13:54:31 · 841 阅读 · 0 评论 -
L2-014 列车调度 (25 分)
题目详情 - L2-014 列车调度 (25 分) (pintia.cn)本质就是求下降子序列的个数#include <iostream>#include <set>using namespace std;int main() { int N, c; cin >> N; set<int>st; while (N--) { cin >> c; if (st.upper_bound(c) != st.end())原创 2022-04-23 00:50:45 · 458 阅读 · 0 评论 -
L2-013 红色警报 (25 分)
题目详情 - L2-013 红色警报 (25 分) (pintia.cn)一开始想的是并查集,太难维护了,直接用dfs跑会比较简单。#include<iostream>#include<cstring>using namespace std;const int N=550;int g[N][N];bool st[N];int n,m;void dfs(int v) { st[v]=true; for(int i=0; i<n; i++)原创 2022-04-23 00:12:30 · 525 阅读 · 0 评论 -
L2-035 完全二叉树的层序遍历 (25 分)
题目详情 - L2-035 完全二叉树的层序遍历 (25 分) (pintia.cn)思路:完全二叉树(若根节点为i,左儿子为i*2,右儿子为i*2+1),其层序遍历就是:1,2,3,……,n。有了这个结论后然后就直接模拟后序遍历那样输入,然后顺序输出数组即可。#include<iostream>using namespace std;const int N = 40;int a[N];int n; void dfs(int u){ int l = u*2原创 2022-04-22 22:57:34 · 842 阅读 · 0 评论 -
L2-023 图着色问题 (25 分)
题目详情 - L2-023 图着色问题 (25 分) (pintia.cn)思路:题意是判断是否为k染色的解,所以用set存颜色,不等k时就一定不是解,然后轮询每个点的相邻点是否颜色相同即可#include<iostream>#include<vector>#include<set>using namespace std;const int N = 510; vector<vector<int>> g(N);int color原创 2022-04-22 15:59:04 · 307 阅读 · 0 评论 -
L2-021 点赞狂魔 (25 分)
题目详情 - L2-021 点赞狂魔 (25 分) (pintia.cn)结构体排序+set#include<iostream>#include<algorithm>#include<set>using namespace std;const int N = 110;struct Node{ string name; int cnt; int sum; bool operator<(const Node&原创 2022-04-22 14:02:13 · 326 阅读 · 0 评论 -
L2-020 功夫传人 (25 分)
题目详情 - L2-020 功夫传人 (25 分) (pintia.cn)注意审题,这里计算的是得道者功力总和。思路:本质是一棵树,得道者都是叶子结点,所以直接dfs到叶子结点并计算总和即可。#include<iostream>#include<vector>using namespace std;const int N = 100010;vector<vector<int>> g(N);int a[N];double sum = 0原创 2022-04-22 14:00:16 · 154 阅读 · 0 评论 -
L2-022 重排链表 (25 分) 链表操作
题目详情 - L2-022 重排链表 (25 分) (pintia.cn)思路:先通过数组生成链表,然后通过vector控制前后关系即可。#include<iostream>#include<cstring>#include<vector>using namespace std;const int N = 100010;int e[N],ne[N];int main(){ int n,h; cin>>h>>n原创 2022-04-21 22:55:51 · 454 阅读 · 0 评论 -
L2-007 家庭房产 (25 分) 并查集或图的遍历
题目详情 - L2-007 家庭房产 (25 分) (pintia.cn)并查集思路:记录家庭人数、房产数量和房产面积的思想跟算连通块一样(记得初始化),新的结点并入集合时同时该结点的属性值加入祖宗结点上去(将最小编号设为祖宗),最后轮询一遍获得祖宗(f[x] = x 点)的数量就是家庭的数量。然后结构体排序输出即可。#include<iostream>#include<vector>#include<algorithm>#include<cs原创 2022-04-21 16:45:41 · 392 阅读 · 0 评论 -
L2-010 排座位 (25 分) 并查集
题目详情 - L2-010 排座位 (25 分) (pintia.cn)有个关键点是判断两人之间是否有共同朋友,这个等同与图是否联通问题,所以使用并查集来解决#include<iostream>using namespace std;const int N = 110;int a[N][N],f[N];int n,m,k;bool check(int x,int y){ for(int i = 1; i <= n; i++){ if(a[x][i原创 2022-04-21 15:12:26 · 309 阅读 · 0 评论 -
L2-012 关于堆的判断 (25 分)(字符串bug待解决)
题目详情 - L2-012 关于堆的判断 (25 分) (pintia.cn)已查出:字符串处理错误,还未能解决。#include<iostream>#include<unordered_map>using namespace std;const int N = 1010, INF = 0x3f3f3f3f;unordered_map<int,int> um;int h[N],sz;void insert(int x){ h[++sz] =原创 2022-04-21 13:31:41 · 194 阅读 · 0 评论 -
L2-002 链表去重 (25 分) 标程
题目详情 - L2-002 链表去重 (25 分) (pintia.cn)思路:先用数组根据输入建成链表,然后再去判重,使用vector存储自然就有前后关系了。#include<iostream>#include<cmath>#include<vector>#include<unordered_set>using namespace std;const int N = 100010;struct Node{ int k,val;}原创 2022-04-21 09:11:11 · 1476 阅读 · 0 评论 -
L2-011 玩转二叉树 (25 分)
题目详情 - L2-011 玩转二叉树 (25 分) (pintia.cn)给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入.原创 2022-04-19 22:32:31 · 220 阅读 · 0 评论 -
二叉搜索树前序序列转中序和后序
首先,要明白二叉搜索树前序序列可以唯一确定一棵二叉搜索树。第一步,建立根节点第二步,获得右子树第一个结点的偏移k第三步,划分左右子树的区间#include<iostream>#include<vector>using namespace std;typedef struct Node* Tree;const int N = 1010;vector<int> hx,qx,zx;int a[N];struct Node{ int data;原创 2022-04-19 13:16:36 · 375 阅读 · 0 评论 -
L3-1 直捣黄龙 (30 分) djk+dfs
题目详情 - L3-1 直捣黄龙 (30 分) (pintia.cn)本题是一部战争大片 —— 你需要从己方大本营出发,一路攻城略地杀到敌方大本营。首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营。当这样的路径不唯一时,要求选择可以沿途解放最多城镇的路径。若这样的路径也不唯一,则选择可以有效杀伤最多敌军的路径。输入格式:输入第一行给出2个正整数N(2≤N≤200,城镇总数)和K(城镇间道路条数),以及己方大本营和敌方大本营的代号。随后N-1行,每行给出除了己方大本营...原创 2022-04-18 23:06:06 · 364 阅读 · 0 评论 -
L2-3 浪漫侧影 (25 分)
题目详情 - L2-3 浪漫侧影 (25 分) (pintia.cn)“侧影”就是从左侧或者右侧去观察物体所看到的内容。例如上图中男生的侧影是从他右侧看过去的样子,叫“右视图”;女生的侧影是从她左侧看过去的样子,叫“左视图”。520 这个日子还在打比赛的你,也就抱着一棵二叉树左看看右看看了……我们将二叉树的“侧影”定义为从一侧能看到的所有结点从上到下形成的序列。例如下图这棵二叉树,其右视图就是 { 1, 2, 3, 4, 5 },左视图就是 { 1, 6, 7, 8, 5 }。于是让我们原创 2022-04-17 20:56:24 · 881 阅读 · 0 评论 -
798. 得分最高的最小轮调(困难 差分数组)
题目链接798. 得分最高的最小轮调 - 力扣(LeetCode) (leetcode-cn.com)思路参考力扣@himymBenhttps://leetcode-cn.com/problems/smallest-rotation-with-highest-score/solution/pythonjavajavascriptgo-chai-fen-shu-zu-b-xhvy/坐标i和数字num都对k最终是否使该位变为小于等于0做出了贡献,且k在连续变动时,这...原创 2022-03-09 23:18:46 · 286 阅读 · 0 评论 -
59. 螺旋矩阵 II(思路简单)
给你一个正整数n,生成一个包含1到n2所有元素,且元素按顺时针顺序螺旋排列的n x n正方形矩阵matrix。输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]思路:class Solution {public: vector<vector<int>> generateMatrix(int n) { int ed = n - 1, st = 0, idx = 0; ...原创 2022-03-06 23:56:20 · 161 阅读 · 0 评论 -
第 283 场周赛 向数组中追加 K 个整数(排序去重三种方法)
给你一个整数数组nums和一个整数k。请你向nums中追加k个未出现在nums中的、互不相同的正整数,并使结果数组的元素和最小。返回追加到nums中的k个整数之和。示例 1:输入:nums = [1,4,25,10,25], k = 2输出:5解释:在该解法中,向数组中追加的两个互不相同且未出现的正整数是 2 和 3 。nums 最终元素和为 1 + 4 + 25 + 10 + 25 + 2 + 3 = 70 ,这是所有情况中的最小值。所以追加...原创 2022-03-06 13:04:49 · 223 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
思路:走对角线class Solution {public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { int n = matrix.size(), m = -1; if(n) m = matrix[0].size(); for(int i = 0, j = 0; (i < n || j < m...原创 2022-03-03 20:01:07 · 117 阅读 · 0 评论 -
334. 递增的三元子序列
题目给你一个整数数组nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k)且满足 i < j < k ,使得nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。示例 1:输入:nums = [1,2,3,4,5]输出:true解释:任何 i < j < k 的三元组都满足题意示例 2:输入:nums = [5,4,3,2,1]输出:fa...原创 2022-01-12 16:02:59 · 245 阅读 · 0 评论 -
逃离大迷宫-力扣
题目在一个 10^6x 10^6的网格中,每个网格上方格的坐标为(x, y) 。现在从源方格source = [sx, sy]开始出发,意图赶往目标方格target = [tx, ty] 。数组 blocked 是封锁的方格列表,其中每个 blocked[i] = [xi, yi] 表示坐标为 (xi, yi) 的方格是禁止通行的。每次移动,都可以走到网格中在四个方向上相邻的方格,只要该方格不在给出的封锁列表blocked上。同时,不允许走出网格。只有在可以通过一系列的移动从...原创 2022-01-11 21:28:24 · 366 阅读 · 0 评论 -
力扣-简化路径
给你一个字符串 path ,表示指向某一文件或目录的Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..)表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。请注意,返回的 规范路径 必须遵循下述格式:始终以斜杠 '/' 开头..原创 2022-01-06 16:49:05 · 115 阅读 · 0 评论 -
第十一届蓝桥杯C++B组 试题E:七段码
试题EE:七段码【问题描述】上图给出了七段码数码管的一个图示,数码管中一共有77段可以发光的二 极管,分别标记为a,b,c,d,e,f,ga,b,c,d,e,f,g。小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符 的表达时,要求所有发光的二极管是连成一片的。例如:bb发光,其他二极管不发光可以用来表达一种字符。例如:cc发光,其他二极管不发光可以用来表达一种字符。这种方案与上 一行的方案可以用来表示不同的字符,尽管看上去比较相似。例如:a,b,c...原创 2021-10-26 22:03:30 · 736 阅读 · 0 评论 -
AVL树(C实现)
#include<stdio.h>#include<stdlib.h>//分别定义平衡因子数#define LH +1#define EH 0#define RH -1typedef int ElemType;//定义二叉排序树 typedef struct BSTNode{//BST二叉搜索树 ElemType data; int bf;//balance flag; 存放平衡因子 struct BSTNode *lchild,*rchild; }*.原创 2021-10-23 23:28:48 · 159 阅读 · 0 评论 -
01背包与完全背包的区分
区别:01背包同个物品只能选1个,完全背包同个物品可以选大于等于0个。 01背包优化版的j 从 m->v[i] 会只使用一次 v[i] ,而完全背包优化版的 j 从 v[i] -> m 可以反复使用 v[i]( f[m] 可能会使用到 f[v[i]] 的值,这就相当于 f[m] 又装入了一次i物品)。思想:01背包为自上而下(逆序遍历),完全背包为自底向上(正序遍历)。01背包可以求最大值,也可以求最小值。例题目录01背包求最大值完全背包01背包求最大值...原创 2021-10-19 20:47:18 · 1327 阅读 · 0 评论