题目总结
文章平均质量分 61
sykai1
这个作者很懒,什么都没留下…
展开
-
牛客16498 寻找道路(双向BFS)
链接:https://ac.nowcoder.com/acm/problem/16498来源:牛客网在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件:1.路径上的所有点的出边所指向的点都直接或间接与终点连通。2.在满足条件1的情况下使路径最短。注意:图G中可能存在重边和自环,题目保证终点没有出边。请你输出符合条件的路径的长度。输入描述:第一行有两个用一个空格隔开的整数n和m,表示图有n个点和m条边。接下来的m行每行2个整数x、y.原创 2021-10-30 20:28:32 · 287 阅读 · 0 评论 -
LeetCode34 在排序数组中查找元素的第一个位置和最后一个位置(二分查找)
谨以本文记录学习、回顾二分查找算法过程,如有错误还请朋友指正!题目给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例 2:输入:nums = [5,7,7,8,8,10], target =原创 2021-08-18 18:10:38 · 165 阅读 · 0 评论 -
LeetCode704 二分查找
题目:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例2:输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回 -1提示:你可以假设 nums原创 2021-08-18 17:14:46 · 98 阅读 · 0 评论 -
01背包dp变形--Robberies
题意:一个强盗要抢劫银行又不想被抓到,所以要进行概率分析求他在不被抓的情况下能抢最多的钱。他给定T(样例个数),N(要抢的银行的个数),P(被抓的概率要小于P)Mj(强盗能抢第j个银行Mj元钱),Pj(强盗抢第j个银行被抓的概率为Pj)。思路:被抓的概率不好直接求出来,但可以直接求出不被抓的概率,则有状态转移方程dp[j] = max(dp[j], dp[j-b[i].money]*...原创 2018-09-26 09:03:34 · 197 阅读 · 0 评论 -
AC自动机(简单版)--P3808 【模板】
题意:给出n个模式串和一个文本串,问在文本串中出现了几个模式串。思路:AC自动机裸题;看过n个版本的AC自动机后终于理解了代码是如何实现的。再一次体会到光懂得原理和能利用原理解决问题之间的巨大的鸿沟。代码:#include <iostream>#include <cstdio>#include <cstring>#include <...原创 2018-08-26 14:29:09 · 173 阅读 · 0 评论 -
Dijkstra算法--7-9 旅游规划 (25 分)
题意:思路:单源最短路问题,Dijkstra算法搞定就可以了,因为要找出最便宜的最短路,所以需要在更新最短距离的时候加一个条件(即当最短距离相等的时候,如果该路径的花费更小,就更新最小花费)就可以了。之前自己学的最短路的水平也就仅限于模板题的水平,现在可以在条件上稍微加一些变化,做了数据结构的作业,顺便加深了自己对最短路(Dijkstra)算法的理解。题目所给样例的示意图(数据放在...原创 2018-09-23 19:51:12 · 1080 阅读 · 0 评论 -
7-20 Windows消息队列 (25 分)(模拟水题)
题意: 思路: 用优先队列直接模拟就OK了,另外优先队列存pair的时候比较的是first的值,实测!!上代码:#include <iostream>#include <queue>#include <cstdio>#include <algorithm>#include <cmath>#include &...原创 2018-09-23 20:10:01 · 1037 阅读 · 1 评论 -
哈希算法--7-14 字符串关键字的散列映射 (25 分)
除留余数法设计哈希表:由该式子得到value在哈希表中的存储位置:index = value % p;这里为了尽量的减少冲突,而且让value在哈希表中尽可能的均匀分布,p的选择就至关重要了。而合理选择p的经验是:若散列表表长为m,通常p为小于或等于表长(最好接近m)的最小质数或不包含小于20质因子的合数。平方探测法:冲突是不可避免的,本题中提到的解决冲突的平方探测法:...原创 2018-09-23 17:39:40 · 1676 阅读 · 0 评论 -
前缀和--Be Efficient(Light Oj 1134)
题目传送门:Be Efficient题意:输入n和m,然后输入有n个元素的一个序列,问有多少个子序列元素的和能整除m。思路:求前缀和,利用一个前缀的一个定理求解。前缀和的一个定理是:每次求的前缀和对m取余,两个相等的结果之间的序列的和就是m的倍数。如上序号1、4的结果相同,则序号2、3、4的和是4的倍数,序号2、3的结果相同,则序号3是4的倍数。注意:将储存取余结果的数组...原创 2018-09-06 21:35:08 · 272 阅读 · 0 评论 -
暴力--Aizu1379:Parallel Lines
平行直线题意:给出一些点,这些点两两相连成一条直线,问最多能连成多少条直线。思路:暴力出奇迹!!记得当时比赛做这道题的时候一直依赖于板子,结果却限制了自己的思路,这得改。dfs直接暴力,但是需要将已经走过的点标记一下,用一个循环跳过已经标记的点减少dfs次数,不然得不出正确的结果,因为会出现如下的连线结果(左图),而正确的连线方式应该如右图。代码:#include <i...原创 2018-09-09 16:16:12 · 188 阅读 · 0 评论 -
DP--Aizu1378:Secret of Chocolate Poles
Select Of Chocolate Poles题意:有一个竖直放置的高度为l cm的盒子,现在有三种方块分别为1cm的白块,1cm的黑块,k cm的黑块,要求第一块放进去的必须是黑色的,盒子最上边的必须也是黑色的,盒子不必放满,问一共有多少种放法。思路:知道要用DP确实死活推不出状态转移公式来,这就很窒息了。到网上搜了一下题解,,,,,,还是自己太low了。二维DP,第一维表示盒...原创 2018-09-08 13:06:50 · 174 阅读 · 0 评论 -
二分+多叉哈夫曼树--Sort HDU588
HDU5884 Sort题意:有n个序列要进行归并,每次归并的代价是两个序列的长度的和,要求最终的代价不能超过规定的T,求在此前提下一次能同时进行归并的序列的个数k。思路:还是太单纯,看完题目一直以为要用归并排序来解题,如果已经看过多叉哈夫曼树的知识的话估计就不会这样了。先二分查找这个k,然后用多叉哈夫曼树来判断这个k是不是还能再变小。用两个队列来实现多叉哈夫曼树。PS:如果不进行提前...原创 2018-08-25 23:09:34 · 260 阅读 · 0 评论 -
Dijkstra算法--7-11 社交网络图中结点的“重要性”计算 (30 分)
题意:思路:对每个输入的点跑一遍dijkstra算法,然后对这个点到所有点的距离求和按公式输出就可以了。(这次尝试了用数组模拟链表来做最短路问题,刷新了自己对最短路的理解)这里构造链表的过程我的理解一直有误差,第一行的式子中参与代码构建的是Next[cnt] = head[y];head[y] = cnt++;这两个语句。而前边的只是存了编号为cnt的边的另一个端点和这条边的...原创 2018-09-24 14:20:06 · 1919 阅读 · 0 评论 -
水图(牛客练习赛(DFS搜索))
题意:小w不会离散数学,所以她van的图论游戏是送分的小w有一张n个点n-1条边的无向联通图,每个点编号为1~n,每条边都有一个长度小w现在在点x上她想知道从点x出发经过每个点至少一次,最少需要走多少路思路:从当前位置开始dfs深搜,注意已经搜过的上一个点就不要搜了不然就成死循环了。确实是个水题,但因为图论搜索这方面练习的太少了,看到题却没有往搜索上考虑,太low了!!!代...原创 2018-09-25 09:26:42 · 487 阅读 · 0 评论 -
哈希算法--7-13 航空公司VIP客户查询 (25 分)
题意:思路:读完题目之后的第一思路就是用map将客户的id(string类型)与里程road(int类型)形成映射,然后直接用id查找添加里程或输出里程。但是400ms的限制妥妥的超时了。然后意识到要用哈希做,但是用哈希就有一点不好解决,每个客户的里程怎么保存,考虑了很长时间无果,搜了一下博客,发现可以用结构体来保存,平常用数组模拟链表的时候都是直接开的一维数组,所以当每个客户的信息...原创 2018-09-25 17:15:29 · 3237 阅读 · 1 评论 -
7-17 奥运排行榜 (25 分)
题目:思路:针对四种排序方法构建四个结构体,按四种排序排完之后,把结果汇总到代表国家的一个结构体中。然后就是查询就是了。排序规则可通过下面的例子了解一下:序列:g[0] = 1,g[1] = 2,g[2] = 2, g[3] = 3;排名:1 ,2 ,2 ,3(并不是1,2,3,4)代码: #include <b...原创 2018-09-30 20:19:03 · 2589 阅读 · 0 评论 -
Decoding of Varints(阅读理解题 Gym_101611D)
Decoding of Varints题意&思路: 首先根据红色边框部分的公式算出x,再有绿色部分得知,如果x是偶数则直接除以2,x是奇数则(x+1)/-2。PS:这题有数据会爆掉unsigned long long,就是在最后奇数转换的时候。所以转换的时候可以变公式为-((x-1)/2+1)。代码:#include <iostream>#inclu...原创 2018-09-20 23:50:57 · 392 阅读 · 0 评论 -
二维dp之01背包问题--HDU2159:Fate
题目:思路:二维dp,完全背包,状态转移方程dp[i][z] = max(dp[i][z], dp[i-1][z-a[j]]+b[j]),dp[i][z]表示在杀i个怪,消耗z个容忍度的情况下获得的最大的经验值。刚看到这个题一直把思维限制在一维dp中,总是不能表达全部的条件,然后想到二维dp。因为目的是升级,所以dp表示的就要是最大的经验,下标自然就是剩下的条件忍耐度和杀怪的个数了...原创 2018-09-26 22:04:51 · 232 阅读 · 0 评论 -
DP--HDU1003:MAX SUM
题目:题意:让求给出的序列中连续的一个子序列的和的最大值,以及这个子序列的起点和终点。思路:dp求当前位置的最大值,dp[i] = max(dp[i-1], a[i]);最大值的位置就是终点,既然知道了和的大小,那么,只要找出那个区间的和是该值就可以了,这里可以用一个前缀和数组来求开始的位置。ps:dp还是得多思考、多练啊!!代码:#include <iostre...原创 2018-09-30 08:56:38 · 140 阅读 · 0 评论 -
dp求最长上升子序列的和--HDU1087:Super Jumping!Jumping!Jumping!
传送门:HDU_1087题意:现在要玩一个跳棋类游戏,有棋盘和棋子。从棋子st开始,跳到棋子en结束。跳动棋子的规则是下一个落脚的棋子的号码必须要大于当前棋子的号码。st的号是所有棋子中最小的,en的号是所有棋子中最大的。最终所得分数是所有经过的棋子的号码的和。思路:读完题之后知道这是一个最长上升子序列的题目。因为之前刚刚看过牛客网上一节讲解最长上升子序列的视屏,所以一上来就找准了方向,b...原创 2018-09-30 17:28:02 · 301 阅读 · 0 评论 -
HDU-5968异或密码
超级传送门题目描述:晨晨在纸上写了一个长度为N的非负整数序列{ai}。对于这个序列的一个连续子序列{al,al+1,…,ar}晨晨可以求出其中所有数异或的结果 alxoral+1xor...xorar其 中xor表示位异或运算,对应C、C++、 Java等语言中的^运算。小璐提出了M个询问,每个询问用一个整数 xi描述。对于每个询问,晨晨需要找到序列{ai}的所有连续子序列,求出每个子...原创 2018-08-06 21:14:56 · 272 阅读 · 0 评论 -
线段树--HDU 4027
HDU4027题意:操作指令为0时,对区间[x,y]之间的数字进行开平方;指令为1的时候,对区间[x,y]之间的数字求和并输出;思路:线段树处理就OK了,但是64位内的数最多开8次平方就为1了(开始不信,试了试之后orz.......),所以在开平方的时候加一下限制条件使开平方操作提前结束没必要的操作就可以了,不然会超时。代码中的这句:en - st + 1 == evil[rt]表示...原创 2018-08-21 23:15:42 · 124 阅读 · 0 评论 -
KMP(next数组应用)--UVALive 3026
UVALive 3026 KMP中next[]数组的应用;题意:给出一个字符串,问该字符串每个前缀首字母的位置和该前缀的周期。思路:裸KMP直接上就是了;设该字符串为str,str字符串的长度为len,next[]的有关前缀的周期的性质:如果len % (len - next[len]) =0 (next[len] != 0)则该字符串有长度为len - next[le...原创 2018-08-21 20:23:38 · 171 阅读 · 0 评论 -
匈牙利算法求最大匹配(HDU-4185 Oil Skimming)
如下图:要求最多可以凑成多少对对象大佬博客:https://blog.csdn.net/cillyb/article/details/55511666模板:int link[maxn],vis[maxn];bool dfs(int x){ for(int i = 1; i <= num; i++) { if(!vis[i] &&a...原创 2018-08-15 10:25:37 · 316 阅读 · 0 评论 -
博弈结论记录
一、巴什博奕:只有一堆n个物品,两个人轮流从中取物,规定每次最少取一个,最多取m个,最后取光者为胜。结论:见代码#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#define FRE() freopen("in.txt","r",st...原创 2018-08-07 16:09:43 · 197 阅读 · 0 评论 -
拓扑排序
自己对拓扑排序的理解:例如:安排一些课程的顺序,这些课程有的可以放在一个学期内授课,而有的则有先后顺序,则可以通过拓扑排序来完成这个排序。有序无环图(DAG)才能进行拓扑排序。从图中找出没有入度顶点,存入答案序列中,并将以该点为起点的边从图中删掉。知道找完所有的点为止。图例:(从左往右看)第一步:取出1点或者4点,并将对应的边删掉(这里先取1点,具体的顺序根据实际情况来)得...原创 2018-08-14 14:58:01 · 416 阅读 · 0 评论 -
Maximum Value(unique函数,lower_bound()函数,upper_bound()函数的使用)
传送门在看大佬的代码时候遇到了unique函数以及二分查找的lower_bound和upper_bound函数,所以写这篇文章来记录以备复习。unique函数在STL中unique函数是一个去重函数, unique的功能是去除相邻的重复元素(只保留一个),其实它并不真正把重复的元素删除,是把重复的元素移到后面去了,然后依然保存到了原数组中,然后 返回去重后最后一个元素的地址,因为uni...原创 2018-08-06 21:28:18 · 218 阅读 · 0 评论 -
01背包问题--HDU-1864&&HDU-2602
DP-01背包问题例题输入处理有点恶心人,不过处理完后就是简单的DP了从头开始dp[i]表示从0开始到i的最优结果,最后从都边里dp数组,求得最大的报销额。对于每个i都要从头维护最优结果。(二刷感觉仍不得dp精髓,,,,)HDU-1864最大报销额#include <iostream>#include <queue>#include <cst...原创 2018-08-06 20:58:32 · 291 阅读 · 1 评论 -
区间DP
一场比赛让自己看到了学了这么长时间,竟然还有这么多落下的东西。区间DP,通过先求小区间的最优解,然后通过小区间的最优解来得到大区间的最优解。区间DP板子for(int len = 2; len <= N; len++)//枚举区间的长度,长度是从2开始的,从一开始是貌似没什么意思 for(int st = 0; st < N; st++)//枚举区间的开始 ...原创 2018-08-06 20:48:21 · 117 阅读 · 0 评论 -
欧几里得算法用法总结
当年没填起来的坑,迟早会再一次掉进去!!!想想还是将现在自己会用了的部分记录下来,以后再做补充。欧几里得算法: 到目前为止也只是用来求一下两个整数的最大公约数(感觉又是一个巨大无比的坑)。暂时先把这个用法记下来吧。//非递归实现long long gcd(long long a,long long b){ int temp; while(b) ...原创 2018-07-26 23:00:10 · 425 阅读 · 0 评论 -
欧拉函数
欧拉函数:(转自百度百科) 欧拉函数F(x)的作用:求从1到x与x互质的数的个数。直接求欧拉函数int euler(int n)//计算与n互质的数的个数{ int res = n,maxn = n; for(int i=2;i*i < maxn;i++) { if(n % i =...原创 2018-05-15 21:46:04 · 221 阅读 · 0 评论 -
Dijkstra算法--代码模板
自己对Dijstra算法的理解是:首先输入保存点,边的权值(注意无向图和有向图在保存时的区别)。 将表示从起点st到顶点 i 的距离的d[ i ]数组的每一个值初始化为INF,令d[st] = 0。 遍历d[ ]数组的下标 i (即顶点 i)这个操作是通过优先队列来实现的,然后遍历以顶点 i 为起点的边,更新d[ i ]的最小值。 最后直接访问d[en],即可得到最短距离。通过模板题...原创 2018-08-13 09:56:49 · 341 阅读 · 0 评论 -
弗洛伊德算法--代码模板
翻自己的文章的时候突然发现自己写的有错误,特来改正一下。可以求得任意两点之间的最短路问题int d[maxn][maxn];//d[st][en]表示边e = {u,v}的权值(不存在时设为INF,d[i][j] = 0)int V;//顶点的个数void Floyd(){ for(int k = 0; k < V; k++) for(int i =...原创 2018-08-13 18:33:28 · 270 阅读 · 0 评论 -
树状数组--SGU180 Inversions(树状数组求逆序数)
题目:思路:先离散化数据然后树状数组搞一下求逆序数。离散化的方法:https://blog.csdn.net/gokou_ruri/article/details/7723378自己对用树状数组求逆序数的理解:输入数据并利用树状数组求出前边比它小和等于它的数据有几个,用输入数据的总的个数减去比它小的数就是比它大的数res,将所有的res加起来就是要求的序列的逆序数。如图:...原创 2018-08-22 11:57:52 · 153 阅读 · 0 评论 -
逆元,组合数--Chat Group gym101775A
传送门:Chat Group(gym101775A)题意:一个宿舍中又n个人,最少k(k >= 3)个人就可以建一个讨论组,问最多可以建多少个不同的讨论组。思路:求组合数的和,因为涉及除法取余,所以要求逆元来解题。虽然之前看到过有关逆元的知识,但是一直没有弄明白逆元的应用。嗯~~挖下的坑终于把自己给坑了。这次认栽!!最终的结果是:C(n,k)+C(n,k+1)+..........原创 2018-08-31 21:00:24 · 291 阅读 · 0 评论 -
Entertainment Box Gym100781E(数据结构+贪心)
Entertainment Box题意:有n个节目,每个节目给出开始时间(st)和结束时间(en); 有k个内存条这k个内存条可以同时存储节目。如果节目j的开始时间stj 大于等于节目i的结束时间,就可以放进内存条中; 问这k个内存条最多可以存储多少个节目。思路:开一个multiset容器,开始压入k个0,表示k个内存条,这k个数表示存入的该内存条的最后一个节目的结束时间。将所有的...原创 2018-08-24 00:11:20 · 210 阅读 · 0 评论 -
UVA1395 Slim Span(kruskal)
题目:Slim Span UVA 1395题意:给出一副无向有权图,求生成树中最小的苗条度(最大权值减最小权值),如果不能生成树,就输出-1;思路:将所有的边按权值有小到大排序,然后枚举每一条边,以这条边开始利用Kruskal算法生成树,生成过程中求出权值的最大值,这个最大值减去当前枚举的边的权值就是苗条度,再动态维护一下最小苗条度就可以了。#include <iostream...原创 2018-08-20 19:48:22 · 169 阅读 · 0 评论 -
UVA1001 Say Cheese(Dijkstra或Floyd)
题目链接:UVA1001题意:在一个巨大奶酪中的A要以最短的时间与B相遇。在奶酪中走一米的距离花费的时间是10s,而奶酪中有许多洞,穿过这些洞的时间是0s。给出A、B以及各个洞的坐标,求最短的时间。三维??乖乖,这怎么用最短路算法。在搜了题解后才知道可以编号压缩成二维啊,这操作骚气,实在想不出来啊!!思路:将起点,终点,各个洞进行编号看成一个一个的点,写一个函数求出各个点之间的距离(即...原创 2018-08-20 18:39:02 · 159 阅读 · 0 评论 -
Cat VS Dog HDU_3829(最大独立集最大匹配)
Cat VS Dog题意:一群小朋友去动物园,如果每个小朋友喜欢的动物是猫,那么不喜欢的动物一定是狗,反之也是。现在动物园的管理者要拿走一些动物,如果拿走的是某个小朋友不喜欢的动物,那这个小朋友就非常开心,反之,如果是某个小朋友喜欢的动物,这个小朋友就非常的不开心,问那完后最多有几个小朋友会非常开心。暑假最后一场个人赛,可还行,有点凉凉~~讲真看出是二分图最大匹配的题目,但是没学最大独...原创 2018-08-17 18:57:37 · 164 阅读 · 0 评论 -
Java大整数--Coefficient Computation
Coefficient Computation UVALive8265题意:计算组合数C(n,k)的值并将值按给定的进制输出。思路:Java大整数类硬上。PS:刚刚学完Java的大整数类,结果却被Java怎么开数组卡到吐血,直接后果就是少开一题,赛后学长指导后5分钟出题,真酸爽……包:java.math.* BigInteger类实现了任意精度的整数运算。 BigDecimal...原创 2018-08-27 10:11:46 · 221 阅读 · 0 评论