![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
清风puts
..
展开
-
c/c++ 洛谷 P1381 单词背诵
题目描述灵梦有 nn 个单词想要背,但她想通过一篇文章中的一段来记住这些单词。文章由 m 个单词构成,她想在文章中找出连续的一段,其中包含最多的她想要背的单词(重复的只算一个)。并且在背诵的单词量尽量多的情况下,还要使选出的文章段落尽量短,这样她就可以用尽量短的时间学习尽可能多的单词了。解题思路:单调队列 map代码如下:#include<cstdio>#include<cmath>#include<algorithm>#include<cstri原创 2021-10-18 06:00:00 · 374 阅读 · 0 评论 -
c/c++ 力扣(LeetCode) 282.给表达式添加运算符
题目链接力扣(LeetCode) 282.给表达式添加运算符不想戳的看下图:题目描述:样例:数据范围:解题思路:回溯。记录题目要求的 target 值。注意:1、起始位置;2、0不能作为数字开头;3、用乘法时,记录中间值,更新时先把原数删掉。代码吐下:#define ll long longclass Solution {public: vector<string> ans; char op[3]={'+','-','*'};原创 2021-10-16 15:09:53 · 255 阅读 · 0 评论 -
c/c++ 洛谷 P1616 疯狂的采药
题目LiYuxiang 是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同种类的草药,采每一种都需要一些时间,每一种也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”如果你是 LiYuxiang,你能完成这个任务吗?此题和原题的不同点:每种草药可以无限制地疯狂采摘。原创 2021-10-16 14:42:14 · 347 阅读 · 0 评论 -
c/c++ 奶牛晒衣服
题目在熊大妈英明的带领下,时针和他的同伴生下了许多牛宝宝。熊大妈决定给每个宝宝都穿上可爱的婴儿装。于是,为牛宝宝洗晒衣服就成了很不爽的事情。圣人王担负起了这个重任。洗完衣服后,你就要弄干衣服。衣服在自然条件下用1的时间可以晒干A点湿度。抠门的熊大妈买了1台烘衣机。使用烘衣机可以让你用1的时间使1件衣服除开自然晒干A点湿度外,还可烘干B点湿度,但在1的时间内只能对1件衣服使用。N件的衣服因为种种原因而不一样湿,现在告诉你每件衣服的湿度,要你求出弄干所有衣服的最少时间(湿度为0为干)。解题思路:循环原创 2021-10-15 20:31:12 · 621 阅读 · 0 评论 -
c/c++ 洛谷 P1030 求先序遍历
题目给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度≤8)。解题思路DFS 递归,还原树形结构代码如下:#include <iostream>using namespace std;string in_str,post_str;void build(int l1,int r1,int l2,int r2){ if(l1>r1) return; cout <<原创 2021-10-15 20:24:59 · 145 阅读 · 0 评论 -
求树的直径
两遍dfs过。第一遍dfs先遍历到最远点(起点),第二遍dfs遍历到另一个最远点(终点),遍历个数就是直径。代码如下:#include<iostream>#include<algorithm>#include<cstring>using namespace std;int n,tot,t;int head[400010],vis[400010],size[400010];int ans,pos;struct node{ int to,nxt;}原创 2021-10-10 13:06:07 · 69 阅读 · 0 评论 -
c/c++ 洛谷 P1199 三国游戏 [NOIP 2010 普及组]
题目链接洛谷 P1199 三国游戏题目描述小涵很喜欢电脑游戏,这些天他正在玩一个叫做《三国》的游戏。在游戏中,小涵和计算机各执一方,组建各自的军队进行对战。游戏中共有 NN 位武将(NN为偶数且不小于44),任意两个武将之间有一个“默契值”,表示若此两位武将作为一对组合作战时,该组合的威力有多大。游戏开始前,所有武将都是自由的(称为自由武将,一旦某个自由武将被选中作为某方军队的一员,那么他就不再是自由武将了),换句话说,所谓的自由武将不属于任何一方。游戏开始,小涵和计算机要从自由武将中挑选武将组成原创 2021-10-06 13:51:38 · 549 阅读 · 0 评论 -
java 力扣 (LeetCode) 1846. 减小和重新排列数组后的最大元素
题目链接力扣 (LeetCode) 1846. 减小和重新排列数组后的最大元素不想戳的看下图样例数据范围解题思路:贪心算法 + 哈希表统计,不断维护增大一个max num。代码如下: public int maximumElementAfterDecrementingAndRearranging(int[] arr) { if (arr.length == 0) { return 0; } TreeMap&原创 2021-07-15 12:11:05 · 95 阅读 · 0 评论 -
c/c++ 洛谷 P1007 独木桥
题目链接洛谷 P1007 独木桥不想戳的看下图输入输出、样例、及数据范围解题思路:仔细考虑会发现,两个人相遇无论转不转身两个人所走的 总路程 都是一样的,那么时间也都一样,所以我们大可让两个士兵相遇后继续直走。如果这样考虑,每个士兵之间就不会有影响,代码也会简单不少。注意:有一个细节要考虑到,因为每一个士兵是同时开始走,而不是一个一个走。所以max/min(向左走所走路程,向右走所走路程)还要在减去已经过去的时间,但是这有可能为负,也就是在这之前那个士兵已将走完,所以应该加0。代码如下:原创 2021-07-15 12:03:28 · 506 阅读 · 0 评论 -
python 力扣(LeetCode) 1818.绝对差值和
题目链接力扣(LeetCode) 1818.绝对差值和不想戳的看下图:样例:数据范围:解题思路:二分查找后进行排序。代码如下:class Solution: def minAbsoluteSumDiff(self, nums1: List[int], nums2: List[int]) -> int: mod = 1_000_000_007 rec = sorted(nums1) sum, maxn, n = 0, 0, l原创 2021-07-14 21:32:56 · 140 阅读 · 0 评论 -
c/c++ 洛谷 P1003 【NOIP2011 提高组】 铺地毯
题目链接洛谷 P1003 【NOIP2011 提高组】 铺地毯不想戳的看下图:样例及解释数据范围解题思路:从后往前找地毯,找到了我就输出并返回。代码如下:#include <iostream>#include <cstring>#include <cmath>using namespace std;const int maxn = 10000;int n,x,y;int a[maxn],b[maxn],g[maxn],k[maxn];/原创 2021-07-14 12:52:27 · 598 阅读 · 0 评论 -
c/c++ 洛谷 P1002 【NOIP2002 普及组】 过河卒
题目链接洛谷 P1002 【NOIP2002 普及组】 过河卒不想戳的看下图输入输出,样例,及数据范围解题思路:递推出状态表达式,代码如下:#include <iostream>using namespace std;const int MAXN=25;int d[8][2]={{1,2},{1,-2},{-1,2},{-1,-2},{2,1},{2,-1},{-2,1},{-2,-1}};//八个方位,这上面的点为-1表示不能走int f[MAXN][MAXN];原创 2021-07-14 12:41:31 · 350 阅读 · 0 评论 -
c/c++ 洛谷 P1167 刷题
题目链接洛谷 P1167 刷题不想戳的看下图输入输出格式及样例:解题思路:将其统一为分钟,再用贪心。废话不多说,代码奉上。代码如下:#include <iostream>#include <cstdlib>#include <cstdio>#include <cmath>#include <algorithm>#define ll long longusing namespace std;long long n,a原创 2021-07-13 12:43:20 · 404 阅读 · 1 评论 -
力扣 (LeetCode) 218.天际线问题
题目链接力扣(LeetCode) 218.天际线问题不想戳的看下图:样例:数据范围:解题方法1:扫描线法代码如下(java):class Solution { // 排序规则,按照x的坐标升序排列,若x坐标相同,右端点在前 class IntCompator implements Comparator<int[]> { @Override public int compare(int[] o1, int[] o2) { // TODO Auto-gener原创 2021-07-13 12:32:52 · 254 阅读 · 0 评论 -
c/c++ 洛谷 P3397 地毯
题目链接洛谷 P3397 地毯不想戳的看下图样例:解题思路:一道典型的二维数组,将坐标范围内都加上一,轻松解决。代码如下:#include <bits/stdc++.h>using namespace std;const int maxn = 1010;int n,m,a[maxn][maxn];int main(){ int x1,x2,y1,y2; cin>>n>>m; for(int i=1;i<=m;i++){ cin原创 2021-07-12 16:59:44 · 257 阅读 · 0 评论 -
c/c++ 力扣LeetCode 274.H指数
题目链接力扣Leetcode 274.H指数不想戳的看下图解题思路根据题目的意思,找一个最大的数值t,这个数字满足在我们的数组里大于等于t的至少有t个,如果满足这个条件,t就是一个合法的数值,然后我们需要找到最大的那个t。于是我们设置外层循环为引用的次数,从1到数组元素中的最大值结束,用i表示。然后我们设置内层循环为数组元素的遍历。每次进入内层循环之前,我们都会设置一个计数器为count = 0,然后我们遍历数组,如果数组元素满足大于等于i,count就加1,然后接着对count进行判断,如果原创 2021-07-11 19:40:09 · 136 阅读 · 0 评论 -
c/c++ 洛谷 P1428 小鱼比可爱
题目链接洛谷 P1428 小鱼比可爱不想戳的看下图解题思路因为小鱼只能看见左边,所以此题我们使用倒序。代码如下:#include <iostream>//输入输出流 头文件using namespace std;//命名空间#define maxn 1000 //宏定义一个较大值int n,m,a[maxn],b[maxn];//初始化int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>原创 2021-07-10 13:09:43 · 1349 阅读 · 0 评论 -
c/c++ 洛谷 P1296 奶牛的耳语
题目链接洛谷 P1296 奶牛的耳语不想戳的看下图解题思路虽然样例中给的是有序数组,但是题目并未说明有序,所以在此处有个细节,先 sort 一遍,再进行累加。代码如下:#include <iostream> //输入输出流 头文件#include <algorithm> //因为用到了 sort ,所以加上算法头文件using namespace std; //命名空间#define maxn 100006 //宏定义一个较大值int n,m,a[maxn]原创 2021-07-10 12:18:41 · 435 阅读 · 0 评论 -
c/c++ 洛谷 P1590 失踪的7
题目链接洛谷 P1590 失踪的7不想戳的看下图解题思路:输入后,先给数组赋值,然后循环检测7,检测到就退出,判断是否为Pascal数。代码如下:#include<iostream> //输入输出流 头文件 using namespace std;//命名空间 #define maxn 10000 //宏定义一个较大值 int n,a,sum[maxn];//初始化 int main(){ cin>>n; for(int i=1;i<=原创 2021-07-09 18:06:21 · 476 阅读 · 0 评论 -
c/c++ 力扣LeetCode 645.错误的集合
题目链接力扣 645.错误的集合不想戳的看下图解题思路循环嵌套对于这道题,有很多种方法。首先想到的,应是循环嵌套。直接for循环两边寻找相同,并求得丢失的整数。代码就不展示了,想必大家都会写。但时间复杂度O(n2),是相当高的,对于这题的数据范围,不适合用这个方法。map我们想到,可以使用STL里面的map。代码如下:class Solution { public int[] findErrorNums(int[] nums) { int result[] = new原创 2021-07-05 22:21:40 · 187 阅读 · 0 评论 -
c/c++ 力扣 LeetCode 50.Pow(x,n)
题目链接力扣 50.Pow(x,n)不想戳的看下图这里,我们给出4种解法。解法一:直接返回函数值return pow(x,n);//注:pow是计算以x为底的n次方值解法二:暴力求解代码如下:class Solution {public: double myPow(double x, int n) { double result = 1; if (n < 0) x = 1 / x, n = -n; for (int i =原创 2021-07-03 17:23:58 · 173 阅读 · 0 评论 -
c/c++ 力扣LeetCode 752.打开转盘锁
题目链接:力扣 752.打开转盘锁不想戳的看下图:算法详解:普通BFS搜索时,每一层的搜索节点数量会爆炸级增加。假设每一次搜索都有 nn 个新的状态,并假设从起点到目标路径长为 mm,那就要搜索:n+n2+n3+…+n^mn+n2 +n3 +…+nm 个状态,状态数就是 n^{m+1}n m+1 数量级的。所以,此时,双向的BFS就派上用场了。原理:双向BFS是同时从起点和终点两个方向开始搜索,一旦搜索到另一个方向已经搜索过的位置(或者说出现某个状态被两个方向均访问到了),就意味着找到了一条原创 2021-06-25 18:22:37 · 162 阅读 · 0 评论 -
c/c++ 洛谷 P3406 海底高铁
题目链接洛谷 P3406 海底高铁不想戳的看下图:就是简单的前缀和,只是有一些要注意的点要懂,没有太大的难度。代码如下:#include<bits/stdc++.h>using namespace std;#define maxn 100005 //根据题目数据范围,宏定义一个较大值 int n,m,p,c[maxn],p2,p1,a,b,c1;long long sum,ans;//初始化 int main(){ cin>>n>>m; if原创 2021-06-20 17:09:16 · 332 阅读 · 0 评论 -
c/c++ 洛谷 P2722 [USACO3.1]总分 Score Inflation
题目链接:洛谷 P2722总分不想戳的看下图:这题乍看很难, 其实是一道完全背包的模板题,没有过多的限制。这里给同学们提供一个一维数组的方法。代码如下:#include <bits/stdc++.h> using namespace std;int x,y,t[10002],p[10002],f[10002],m,n;//初始化 int main(){ cin>>m>>n; for(int i=1;i<=n;i++){原创 2021-06-20 16:47:30 · 295 阅读 · 0 评论 -
c/c++ 力扣LeetCode 1.两数之和
题目链接:力扣 1.两数之和不想戳的看下图:此题比较简单, 这里我们有两种方法:暴力枚举 和 哈希表。一、暴力求解法解析:直接循环两遍求解代码如下://c++class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { int i,j; for(i=0;i<nums.size()-1;i++){ f原创 2021-06-20 16:30:22 · 240 阅读 · 0 评论 -
力扣LeetCode 1600.皇位继承顺序
题目链接:力扣 1600.皇位继承顺序不想戳的看下图:解题思路:题目这种父子关系,最方便使用的就是二叉树了。但是我们没有办法保证每个人最多两个孩子,这就需要用到将多叉树转为二叉树的相关知识了。我们可以定义一个树节点P的左子节点为P的孩子,而P的右子节点表示为P的兄弟。这样就可以完美地用二叉树来表示这个国家的父子兄弟关系。不难看出在这种情况下,继承顺序就是对该树中还存活的节点的前序遍历。编程思路:先定义树节点,注意添加一个状态表示该节点的生死状态。由于题目中保证了名称的不同,所以我们可以使用h原创 2021-06-20 12:53:47 · 133 阅读 · 0 评论 -
c/c++ 高精度算法(有ac代码)
高精度算法导语我们都知道,数据类型是有限的,只能用于存储一定的数(如图),即使是最大的也只能存储18~19位。而对于较大数字的计算,我们有另一种方法:高精度算法。高精度算法的思想:一般用一个数组来存储一个数,数组的一个元素对应于数的一位(当然,在以后的优化中为了加快计算速度,也可用数组的一个元素表示数的多位数字),表示时,由于数计算时可能要进位,因此为了方便,将数由低位到高位依次存在数组下标对应由低到高位置上。运算因子超出了整型、实型能表示的范围,肯定不能直接用一个数的形式来表示。在c++中,能原创 2021-06-19 22:06:37 · 350 阅读 · 0 评论 -
c/c++ 高精度乘法详解(有ac代码)
题目a*b,数据范围:a,b<=10的100次方代码如下:#include <bits/stdc++.h> using namespace std;#define maxn 100 //宏定义一个较大值,一般情况下不会超过100位 char a1[maxn],b1[maxn];int a[maxn],b[maxn],c[maxn],lena,lenb,lenc,i,j,x;//初始化 int main(){ gets(a1); gets(b1);//输入原创 2021-06-19 21:58:26 · 539 阅读 · 0 评论 -
c/c++ 高精度减法详解(有ac代码)
题目a-b,数据范围:a,b<=10的100次方代码如下:#include <bits/stdc++.h>using namespace std;#define maxn 100 //宏定义一个较大值,一般情况下不会超过100位 char s1[maxn],s2[maxn],tmp[maxn];int a[maxn],b[maxn],c[maxn];//初始化 int main() { cin>>s1>>s2;//输入 i原创 2021-06-19 21:46:48 · 578 阅读 · 0 评论 -
c/c++ 高精度加法详解(有ac代码)
题目:a+b,数据范围:a,b<=10的100次方代码如下:#include <bits/stdc++.h>using namespace std;#define maxn 100 //宏定义一个较大值,一般情况下不会超过100位 char s1[maxn],s2[maxn];int a[maxn],b[maxn],c[maxn],cnt;//初始化 int main() { cin>>s1>>s2;//输入 int len原创 2021-06-18 17:48:52 · 262 阅读 · 0 评论