![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
追梦_赤子
在永无止境的学技术的道路上不断攀升
展开
-
买卖股票问题
买卖股票最佳时机①买卖股票Ⅰ题意给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。解法方案方案①:简单动态规划这里可以使用两个变量,分别记录当前遍历到的最小的价格和当前最大的利润,初始时,显然,最小价值为第一个遍历的价值,即prices[0]原创 2022-04-06 17:11:40 · 304 阅读 · 0 评论 -
滑动窗口问题
ABC—123 C.Colorful Candies今天开始打ABC,好烦,第一题就WA了一发,第二题接着又WA了一发,我吐了,果然,当你实力不够强的时候,谨慎是你最大的筹码。题意:给你N个糖果,请选出连续的K个糖果,让这K个糖果中不同颜色的数量最多。简单来说,就是让我们求滑动窗口内的不同数量的最大值。思路思路就是一个for循环,在循环中,我们利用一个unordered_map来存放不同数以及对应的出现的次数。先存储给定窗口大小内的每个数以及对应的出现次数,利用mp[c[i]]++即可,然后,当i原创 2021-07-17 22:34:43 · 102 阅读 · 0 评论 -
巧用并查集求解环的个数以及连通块的数目
2021年度训练联盟热身训练赛第二场——F题:Interstellar Love题意给你s个点,c个连接数,求解这s个点组成的连通块的数量以及其中所包含的环的数量(孤立的点不算作连通块和环)。思路用并查集连接和查询,定义sig数组来标记环(sig[x]为1,表示存在一个以x为根节点的环)。连通块的数量可以通过遍历每一个结点,求根节点的个数计算即可。AC代码#include<bits/stdc++.h>using namespace std;#define ll long long原创 2021-07-17 18:37:32 · 669 阅读 · 0 评论 -
段错误专辑
写并查集出现段错误?在疯狂百度之后,我总结了自己专用的并查集模板,但是交代码时,出现了段错误,我前删后删,终于找到了该死的bug!下面是我之前的并查集模板。#include<iostream>#include<cstring>using namespace std;const int maxn = 1000005;int p[maxn], r[maxn], id[maxn];int l[maxn];int init(int n){ for(int i =原创 2021-07-17 16:34:20 · 76 阅读 · 0 评论 -
2021年度训练联盟热身训练赛第二场 E-NIH Budget(分组背包)
分组背包大概题意给你n种预算,每个预算包含d组方案以及总预算B,每一个方案中都有4对治病策略(即花费多少钱能治多少病人),而且一定要达到策略中的预算才能治疗对应数量的病人,否则只能治疗前一策略(预算更少的策略)能治疗的病人数量。求用给定的总预算能够治疗的最多病人数。思路:该题为01背包的变形——分组背包问题01背包:有n种物品,有一个容量为m的背包,每种可选可不选,求背包所能放的最大价值; for(int i = 1; i <= 4; i++){ for(int j = m;原创 2021-07-16 18:04:53 · 60 阅读 · 0 评论 -
2021-04-17
图论专题一、Dijkstra算法+堆优化要求:不能有负边(负环)首先,贴一个模板题:https://vjudge.net/problem/POJ-2387/origin题意:给你n个点,m条无向边(可能有重边),让你求到达终点的最短路径。分析:本题为求最短路的板子题,直接上板子就好了,下面是优化后的板子。(16ms)#include <iostream>#include <queue>using namespace std;#define INF 0x3f3f3f原创 2021-04-19 21:04:18 · 65 阅读 · 0 评论 -
ABC 198 补题
ABC198补题:D题:Sample Input 1abcdefghijklSample Output1UNSOLVABLESample Input 2CopysendmoremoneySample Output 29567108510652思路这道题最容易想到的思路就是用next_permutation(v.begin(), b.end())函数来枚举所有的排列,将所有的数都填进去,一个一个去试。当然最开始可以特判一下,可以先用set统计一下三个字符串原创 2021-04-13 20:07:41 · 150 阅读 · 0 评论 -
DFS专辑
区间或及异或题意给你一个数列,让你将其进行等间距拆分成一个或者多个数列,对于每一个数列,计算其中所有数字的或,然后求出以这种方式进行拆分的所有区间的最小的异或值。1<= N <= 200 <= Ai <= 230解题思路:首先,我们看到此题的数据范围非常小,所以我们坚信此题一定可以做出来。由于题目要求等间距拆分,因此我们可以通过递归求解,怎么递归?先递归求每个区间内的或,然后将它们求异或,求出最小值即可。官方题解#include <bits / std原创 2021-03-28 12:32:12 · 62 阅读 · 0 评论 -
Trie树专辑
最大异或对在给定的 N 个整数 A1,A2……AN 中选出两个进行 xor(异或)运算,得到的结果最大是多少?输入格式第一行输入一个整数 N。第二行输入 N 个整数 A1~AN。输出格式输出一个整数表示答案。数据范围1≤N≤105,0≤Ai<231输入样例:31 2 3输出样例:3思路我们最先想到的肯定是暴力,但是这题的数据范围确实比较大,因此,我们需要创建一个Tries树。#include<iostream>#include<algorithm&原创 2021-03-28 11:35:30 · 50 阅读 · 0 评论 -
BFS专辑
链接:https://ac.nowcoder.com/acm/contest/1017/A来源:牛客网题目描述Little Tom loves playing games. One day he downloads a little computer game called ‘Bloxorz’ which makes him excited. It’s a game about rolling a box to a specific position on a special plane. Preci原创 2021-03-25 23:18:59 · 66 阅读 · 0 评论 -
ABC-195
B题题意让你求橙子重量在a到b之内,组成总重量为1000*c的最大橙子个数。样例1:输入:100 200 2输出:10 20样例2:输入:120 150 2输出:14 161<=a <= b <= 1000;1 <= c <= 1000;解题思路设我们取到的一对重量的组合为:d和e,则有:a <=d, e<=b, 且重量为d的橙子取x个,重量为e的橙子取y个。且满足以下两个式子:1、dn = dx + dy;2、dx + ey =原创 2021-03-14 08:46:39 · 153 阅读 · 0 评论 -
蓝桥杯-幸运数
题意问你先将能被2整除的序号对应的数筛掉,然后观察一下筛完后序号为2的这个数a,继续将序号能被a整除的数筛掉,然后再观察一下筛完后序号为a对应的这个数b,继续将能被b整除的序号对应的数筛掉,然后再观察一下筛完后序号为b对应的这个数c,继续将能被c整除的序号对应的数筛掉……思路首先我们先求出筛掉2的倍数,并用一个数组存下来,然后根据题意来模拟,也就是再筛掉能被2整除的序号对应位置上的数,然后再将筛完之后的数用另外一个数组b来存,因为我们要不断地循环,所以,我们还是要把b里面的数又倒回a里面,然后再原创 2021-03-07 17:22:07 · 116 阅读 · 0 评论 -
区间dp
区间dp给你两个长度分别 n 和 m 的整数数组 nums 和 multipliers ,其中 n >= m ,数组下标 从 1 开始 计数。初始时,你的分数为 0 。你需要执行恰好 m 步操作。在第 i 步操作(从 1 开始 计数)中,需要:选择数组 nums 开头处或者末尾处 的整数 x 。你获得 multipliers[i] * x 分,并累加到你的分数中。将 x 从数组 nums 中移除。在执行 m 步操作后,返回 最大 分数。示例 1:输入:nums = [1,2,3], m原创 2021-02-23 12:40:30 · 164 阅读 · 2 评论 -
二分经典题目
二分经典题目袋子里最少数目的球给你一个整数数组 nums ,其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数 maxOperations 。你可以进行如下操作至多 maxOperations 次:选择任意一个袋子,并将袋子里的球分到 2 个新的袋子中,每个袋子里都有 正整数 个球。比方说,一个袋子里有 5 个球,你可以把它们分到两个新袋子里,分别有 1 个和 4 个球,或者分别有 2 个和 3 个球。你的开销是单个袋子里球数目的 最大值 ,你想要 最小化 开销。请你返回原创 2021-02-17 16:50:44 · 316 阅读 · 0 评论 -
codeforce 补题 #701
codeforce 补题#701这道题其实不难的,但是我不知道怎么去递归,怎么去循环。后面看了别人的代码后,感觉其实挺容易的,这里总结一下。法一:递归写法:要么一直做a/b运算要么先做b+1运算再做a/b运算每次na除到0时,记录下ans的最小值代码1:#include<bits/stdc++.h>#define pb push_back#define mp make_pair#define fst first#define snd secondusing name原创 2021-02-13 22:54:23 · 144 阅读 · 0 评论 -
双指针、hash、set多种解法演示
找硬币伊娃喜欢从整个宇宙中收集硬币。有一天,她去了一家宇宙购物中心购物,结账时可以使用各种硬币付款。但是,有一个特殊的付款要求:每张帐单,她只能使用恰好两个硬币来准确的支付消费金额。给定她拥有的所有硬币的面额,请你帮她确定对于给定的金额,她是否可以找到两个硬币来支付。输入格式第一行包含两个整数 N 和 M,分别表示硬币数量以及需要支付的金额。第二行包含 N 个整数,表示每个硬币的面额。输出格式输出一行,包含两个整数 V1,V2,表示所选的两个硬币的面额,使得 V1≤V2原创 2021-02-09 12:17:41 · 78 阅读 · 0 评论 -
统计连续数字的个数
很遗憾,这次cf爆零了,我在第一题上花了好长时间,可是就是没想出解决方法,题目是说要给不同编号的球染色,求最少需要多少种颜色。AC代码如下:#include<iostream>using namespace std;typedef long long ll;ll read(){ char ch = getchar(); ll x = 0, f = 1; while(ch < '0' && ch > '9'){ i..原创 2021-01-29 10:48:28 · 359 阅读 · 0 评论 -
活用双指针快排求第k大值
AcWing 786. 快排应用——第k个数 原题链接 简单题目描述给定一个长度为n的整数数列,以及一个整数k,请用快速选择算法求出数列的第k小的数是多少。输入格式第一行包含两个整数 n 和 k。第二行包含 n 个整数(所有整数均在1~109范围内),表示整数数列。输出格式输出一个整数,表示数列的第k小数。数据范围1≤n≤100000,1≤k≤n输入样例5 32 4 1 5 3输出样例3算法1快速选择算法快排的每一趟,数轴的左边都会是 <= x 的, 右原创 2021-01-16 18:02:39 · 224 阅读 · 0 评论 -
区间合并问题
寒假集训acwing422. 校门外的树某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。原创 2021-01-16 11:03:46 · 75 阅读 · 0 评论 -
随机生成数据并写入文档
随机生成数据并写入文档此例随机生成对应的城市和一年12个月的天气状况并写入文档。#include<iostream>#include<vector>#include<string>#include<time.h>#include<algorithm>using namespace std;//天气在枚举常量中表示enum Enum_weather{ Rainy=0,Snowy,Cloudy,Sunny};//创建城市类原创 2020-12-29 13:00:58 · 383 阅读 · 0 评论 -
加减异或运算器
链接:https://ac.nowcoder.com/acm/contest/9510/A来源:牛客网时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 524288K,其他语言1048576K64bit IO Format: %lld题目描述牛牛家里有一个计算器。牛牛不小心把自己的计算器玩坏了。乘法(×)和除法(÷)按钮全都失灵。所以,牛牛决定以后用它来计算只含加(+)和减(-)的表达式。最近,牛牛突然发现,这个计算器的幂(^)按钮变成了异或键!本来 5^2=25 的,现在 5原创 2020-12-14 17:19:29 · 1815 阅读 · 0 评论 -
求众数【用STL中的map和set实现】
求众数【用STL中的map和set实现】TimeLimit:2000MS MemoryLimit:128000KB64-bit integer IO format:%lldProblem DescriptionInput输入多组数据每组数据的第一行是一个n,表示有n个操作(n<=100000)接下来有n行,有两种操作1 x 表示添加数字x (x是正整数且在int范围内)2 输出添加了的数中出现最多次的数,如果有多个,则依次从小到大输出其中2操作不超过总操作数的1/8。Outpu原创 2020-11-24 17:15:00 · 283 阅读 · 0 评论 -
营业额统计【STL必备技巧】
营业额统计【STL必备技巧】TimeLimit:1000MS MemoryLimit:128MB64-bit integer IO format:%lldProblem DescriptionTiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况。Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额。分析营业情况是一项相当复杂的工作。由于节假日,大减价或者是其他情况的时候,营业额会出现一定的波动,当然一定的波动是能够接受的,但是在某原创 2020-11-24 14:45:30 · 130 阅读 · 0 评论 -
关于STL你不知道的知识点
STL中的小技巧首先就是vector中的partial_sum函数#include<iostream>#include <vector>//vector#include <numeric>#include <time.h> //随机数using namespace std;//自定义方法int func(int x, int y) { return x - y; }void main(){ //定义容器 vector<int>原创 2020-11-16 11:01:29 · 58 阅读 · 0 评论 -
题解 atcoder ABC183
atcoder ABC183思路:设置一个vector数组,用于存储每一个点(即每一分钟)每个人需要用的水的和,由于终点没有包含在这一分钟之内,因此需要排除这个点所有人需要用的水的和,因此首先扫描每一个起点同时存储起点所需花的水,扫描每一个终点同时除去这个点所需花的水。然后通过STL中的patial_sum求出这个vector的前缀和,并将每个点的前缀和存储在原数组中。但是注意要导入numeric头文件。最后就是用*max_element(v.begin(), v.end())求出前缀和的最大值就行了原创 2020-11-16 10:57:56 · 261 阅读 · 0 评论 -
牛客
牛客练习赛72链接:https://ac.nowcoder.com/acm/contest/8282/B来源:牛客网题目描述蒟蒻 \text{brz}brz 买了 n 个雪糕进献给雪糕之王 \text{lzy}lzy,但是他发现了一个难题……雪糕之王 \text{lzy}lzy 吃雪糕是很挑剔的,每次他会选一个区间 [l,r],从左到右依次吃掉雪糕,假如第 i 个吃掉的雪糕和上一个吃掉的类型相同,那么 \text{lzy}lzy 的愉悦值不会提升,否则愉悦值会 +1,特别的,吃第一个雪糕时愉悦值会原创 2020-11-06 23:07:16 · 182 阅读 · 0 评论 -
HDU
HDU水题2049此题主要是结合了错排和组合数两个要点,要注意的就是打表时,要开一个long long 数组,因为涉及到阶乘。#define lcm(a, b) a / gcd(a, b) * b#include<iostream>#include<stdio.h>#include<cstring>#include<cctype>#include<queue>#include<stack>#include<cma原创 2020-11-05 11:47:39 · 76 阅读 · 0 评论 -
神、上帝以及老天爷
神、上帝以及老天爷Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 27049 Accepted Submission(s): 11262Problem DescriptionHDU 2006’10 ACM contest的颁奖晚会隆重开始了!为了活跃气氛,组织者举行了一个别开生面、奖品丰厚的抽奖活动,这个活动的具体要求是这样的:首先原创 2020-11-02 08:27:46 · 147 阅读 · 0 评论 -
HDU
HDU2047阿牛的EOF牛肉串Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 58199 Accepted Submission(s): 27796Problem Description今年的ACM暑期集训队一共有18人,分为6支队伍。其中有一个叫做EOF的队伍,由04级的阿牛、XC以及05级的COY组成。在共同的集训生活中,大家建原创 2020-11-01 19:10:21 · 218 阅读 · 0 评论 -
HDU
HDU2044Problem Description有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。其中,蜂房的结构如下所示。Input输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。Output对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行。Sample Input21 23 6Sample Output13原创 2020-10-30 13:03:24 · 1425 阅读 · 0 评论 -
HDU
HDU2043网上流传一句话:“常在网上飘啊,哪能不挨刀啊~”。其实要想能安安心心地上网其实也不难,学点安全知识就可以。首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:(1).密码长度大于等于8,且不要超过16。(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。这四个字符类别分别为:1.大写字母:A,B,C…Z;2.小写字母:a,b,c…z;3.数字:0,1,2…9;4.特殊符号:~,!,@,#,$,%,^;原创 2020-10-29 23:09:03 · 405 阅读 · 1 评论 -
你会dp吗
dp水题不容易系列之二**Problem Description你活的不容易,我活的不容易,他活的也不容易。不过,如果你看了下面的故事,就会知道,有位老汉比你还不容易。重庆市郊黄泥板村的徐老汉(大号徐东海,简称XDH)这两年辛辛苦苦养了不少羊,到了今年夏天,由于众所周知的高温干旱,实在没办法解决牲畜的饮水问题,就决定把这些羊都赶到集市去卖。从黄泥板村到交易地点要经过N个收费站,按说这收费站和徐老汉没什么关系,但是事实却令徐老汉欲哭无泪:(镜头回放)近景:老汉,一群羊远景:公路,收费站…收原创 2020-10-29 22:15:07 · 119 阅读 · 0 评论 -
不同走法的数量
HDU水题Problem Description有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?Input输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。Output对于每个测试实例,请输出不同走法的数量Sample Input223Sample Output12思路:设:dp[i]为走到第i阶的步数则:状态转移方程:dp[i]=dp[i-1]+d原创 2020-10-29 22:00:52 · 94 阅读 · 0 评论 -
HDU_float
该死的floatHDU2039这题就考我float,开始的时候我一直都是用int,题目也没明确指出,害,浪费了我这么多时间,该死的傻逼题!#define lcm(a, b) a / gcd(a, b) * b#include<iostream>#include<stdio.h>#include<cstring>#include<cctype>#include<queue>#include<stack>#include原创 2020-10-29 21:17:46 · 68 阅读 · 0 评论 -
贪心
贪心水题今年暑假不ACProblem Description“今年暑假不AC?”“是的。”“那你干什么呢?”“看世界杯呀,笨蛋!”“@#$%^&*%…”确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了。作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以及王小丫的《开心辞典》等等,假设你已经知道了所有你喜欢看的电视节目的转播时间表,你会合理安排原创 2020-10-29 20:40:33 · 77 阅读 · 0 评论 -
计算几何
第一道计算几何改革春风吹满地Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 38593 Accepted Submission(s): 19859Problem Description“ 改革春风吹满地,不会AC没关系;实在不行回老家,还有一亩三分地。谢谢!(乐队奏乐)”话说部分学生心态极好,每天就知道游戏,这次考试如此简单原创 2020-10-29 18:33:27 · 77 阅读 · 0 评论 -
溢出问题
利用好条件,避免溢出计算的时候只要每次求最后的3位的乘法模上3即可。int main() { int n, m; while (~scanf("%d%d", &n, &m)) { long long ans = 1; if (!n && !m) break; while (m--) { ans *= n; ans = ans - (ans / 1000) * 1000; } printf("%d\n", ans); }原创 2020-10-29 18:02:47 · 56 阅读 · 0 评论 -
HDU
HDU2034人见人爱A-BTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 90660 Accepted Submission(s): 25312Problem Description参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}+{B},那个题目求的是两个集合的并集,今天我们这个A-B求的是两个集合的差,就是原创 2020-10-29 14:15:24 · 114 阅读 · 0 评论 -
HDU
HDU2032这题最好使用结构体#define lcm(a, b) a / gcd(a, b) * b#include<iostream>#include<stdio.h>#include<cstring>#include<cctype>#include<queue>#include<stack>#include<cmath>using namespace std;const int maxn = 1原创 2020-10-28 23:18:39 · 238 阅读 · 0 评论 -
HDU杨辉三角
HDU杨辉三角题目大意:n表示杨辉三角的层数,注意:每一个杨辉三角后面加一个空行。#define lcm(a, b) a / gcd(a, b) * b#include<iostream>#include<stdio.h>#include<cstring>#include<cctype>#include<queue>#include<stack>#include<cmath>using namespace原创 2020-10-28 22:26:01 · 100 阅读 · 0 评论