hdu
文章平均质量分 57
WilliamSun0122
这个作者很懒,什么都没留下…
展开
-
2015-ICPC-ShangHai-B-hdu5573-构造+二进制
题意给你一个二叉树,根节点为1,从根节点开始依次向下走k层,问如何走使得将路径上的数进行加减最终结果得到n。题解首先我们要知道1、2、4…2^k可以构造出所有小于2^(k+1)的数,那么实际上只要走2的幂次即最左边的结点即可。 根据题意,树的最左边最下一层数为2^(k-1),所以当我们走最左一层时,我们能得到小于2^k的所有数。 由数据范围N<=2^k,可知,我们只需要用二叉树的最左边一列k个(即原创 2017-03-27 17:24:03 · 512 阅读 · 0 评论 -
hdu6119 尺取 双指针
中文题就不说题意了。题解 题目已经说了区间会存在交叉,所以我们先把区间排序后把交叉的区间合并起来。然后用一个数组存放相邻两个区间的差距,之后双指针尺取即可。最后算一下如果只有一个区间时的天数。 代码还是很好懂的#include <bits/stdc++.h>using namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;原创 2017-08-14 18:42:13 · 637 阅读 · 0 评论 -
hdu6102 容斥+树状数组 2017多校第六场1007
题意 给你n个数,这n个数是1-n的一个排列。再有m次询问,每次询问一个区间[l,r]的价值。区间价值定义为sumri=lsumrj=i+1sumrk=j+1gcd(sz[i],sz[j]==sz[k])∗sz[k]sum_{i=l}^r sum_{j=i+1}^r sum_{k=j+1}^r gcd(sz[i],sz[j]==sz[k])*sz[k]。题解 这道题关键就是怎么快速求一个区间中有原创 2017-08-14 15:56:52 · 598 阅读 · 0 评论 -
hdu4135 容斥
题意 题目还是比较好懂的,就是给你一个区间[l,r]和一个数n,问你这个区间中有多少个数和n互质。题解 容斥的思想还是很好懂的,就是把求集合的并转换成求集合的交。但是用代码表示出来还是有难度的。 这一题给的区间范围还是很大的,我们直接求有多少个数与n互质不是很好求,可以先用补集的思想求有多少个数与n不互质。一个数与n不互质等价于其和n有一个不为1的公因子。此时问题就是求区间[l,r]中有多少个原创 2017-08-14 14:30:13 · 514 阅读 · 0 评论 -
hdu6069 区间筛 2017多校第四场1003
题意 设d(n)为n的因子的个数,让你求sumri=ld(ik)%998244353sum_{i=l}^r d(i^k) \% 998244353题解 这题主要用到了一些定理和欧拉筛法。 首先我们应该思考对于d(n)怎么能简单计算出来。 这里有一个定理,由唯一分解定理知n=pk11∗pk22∗...n=p_1^{k_1}*p_2^{k_2}*...,其中pip_i为素数,而d(n)=(k1+原创 2017-08-06 20:15:01 · 448 阅读 · 0 评论 -
hdu6070 二分+线段树 2017多校第四场1004
题意 题目转换后的意思其实就是给你n个数,让你求一个区间[l,r]使该区间内不同数的个数/区间长度最小并输出该值,精度范围是1e-4。题解 网上看了一些博客,都说是分数规划,我还没学,所以不知道。不过按网上来说:对于区间最优比率问题(分数规划问题),常规的解法是二分答案来求。我觉得这题最主要的其实就是怎么想到用二分,这个很关键。 二分为mid时,如果一个区间满足size(l,r)/(r-l+1原创 2017-08-05 19:15:59 · 688 阅读 · 0 评论 -
hdu6103 尺取 双指针 2017多校第六场1008
题意 定义两个字符串的dis为两者字典序之差,一个字符串从前往后,另一个从后往前。现在给出一个m和一个字符串,要求求出最长的给定字符串的两个子串满足它们之间的dis小于等于m的长度。题解 dis计算类似回文串,我们可以枚举对称中点,然后用尺取的思想用双指针实现。枚举对称中点时要注意有奇偶两种情况。 具体可以看代码注释#include <bits/stdc++.h>using namespac原创 2017-08-11 19:57:58 · 497 阅读 · 0 评论 -
hdu6143 排列组合
题意 一个人的名字有名和姓,名和姓上各有n个字符位置,每个位置的字符从m个字符里面选择。问你有多少个人的名字其名和姓上没有相同的字符。题解 比赛的时候排列组合了半天,差点没写出来。官方题解是用容斥写的,有兴趣的可以看看别人容斥的博客。 当时比赛的时候我正着写和反着写都没写出来,最后正着里面套反写出来了。ans=C1m∗1n∗(m−1)n+C2m∗(2n−C12∗1)∗(m−2)n+...ans原创 2017-08-17 20:14:35 · 1563 阅读 · 0 评论 -
hdu6060 一次就懂 dfs+思维 多校第三场1005
题意 给出一颗n个节点的树,要求将2-n号节点分成k个集合,然后对于每个集合加上1号节点算一个联通的最小花费(最小斯坦纳树),定义为每一部分的value,问总的value最大可能是多少。题解 因为给出的n个节点本身满足是一个树,所以对于每个集合求的最小斯坦纳树其实就是最小生成树就是在给出树中联通集合所有节点加上1号节点的所有边权和。 因为每个集合都包含1这个点,因此对于每个点都至少有一条到1的原创 2017-08-02 20:23:20 · 486 阅读 · 0 评论 -
hdu6181 第k短路 Dijkstra(优先队列优化)+A* 2017多校1011
题意就是要你求第二短路,可以说是一个裸题。题解这题可以说类似poj2499。解题思路和它是一样的,不过这题的无向图,而且不回包含起点就是终点的情况。 poj2499对于A*算法,都知道f(n)=g(n)+h(n),这里h(n)为启发式函数。我们令这里的g(n)为从源点s到n所经过的路径,h(n)为把所有边反向后从终点t到n的最短路径dist[n]。即估值=源点到当前点的距离+当前点到终点的最短距离原创 2017-08-25 21:09:09 · 1660 阅读 · 0 评论 -
hdu6169 数论 思维DP 2017多校第九场1009
题意给定区间[L,R]和一个整数K,问区间内所有满足其最小因子(1除外)为K的数的和。L,R,K的范围是(<=1e11) 结果mod1e9+7题解首先,根据唯一分解定理,我们知道一个数一定能分解成若干个素数的幂的乘积。那么我们现在考虑一个数的最小因子为k,这个数应该满足什么条件?显然,首先k必须是素数,否则不可能有数的最小因子是k。其次这个数必须由k及比k大的素数的幂的乘积组成。 我们想到上面之原创 2017-08-23 19:01:01 · 757 阅读 · 0 评论 -
hdu6201 思维+最长路(SPFA或Dijkstra)
题意给你一棵树,树上有点权和边权,让你选择起点S到终点T使得T-S-sum最大。(sum是S到T的距离)输出这个最大值。题解这是2017ACM-ICPC沈阳的网络赛的1008题,这里不得不吐槽一下这个网络赛的体验真的很差,好多题的数据都很弱,各种暴力都能过。。。还有个题最差交2102^{10}必过,直接导致暴力交题,最后OJ都爆了。。。相信很多做过网络赛的都心有余悸。。。这题比赛的时候没做出来,其实原创 2017-09-12 18:31:03 · 1163 阅读 · 0 评论 -
hdu6197 最长上升子序列(LIS)长度
题意给你t组样例,每组样例给出n(<=1e5),k(<=n),再给你n个数组成的序列。问你能不能通过减去该序列中x(<=k)个数,使该序列变成一个非递增或非递减序列。可以输出A is a magic array.,不行就输出A is not a magic array.。题解这题可以转化成最长上升子序列的题。我们正着做一遍最长非递减序列(基本就是比最长上升子序列多个=)得出其长度len,如果len+原创 2017-09-11 21:12:17 · 721 阅读 · 0 评论 -
线性递推式模板 hdu6198为例
今天打2017沈阳网络赛的时候,第五题好像是个找规律的题(因为我好像找出规律了,但是没写),队友直接一个模版,把我推出的前几项放进去后直接就可以把后面的弄出来。。。太强了写这篇博客保存一下这个强无敌的模板,可以解决任何线性递推式.。这个板子是我一个学长从百度之星复赛上扒的杜教的板子。所以我们现在要做的是用推出递推式的前几项.,然后扔进这个板子就可以了。mod换成题目的就OK,前几项丢的越多越好, 一原创 2017-09-10 23:31:21 · 2306 阅读 · 0 评论 -
详谈LCA 在线(RMQ-ST) 和 离线(Tarjan)hdu2586为例
LCA(Least Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先。参考博客: http://www.cnblogs.com/scau20110726/archive/2013/05/26/3100812.html离线LCA的离线算法一般是基于搜索的Tarjan算法。思想: Tarjan是一个离线算法,先把所有的询问保存下来,然后开始Tar原创 2017-09-09 11:00:12 · 552 阅读 · 0 评论 -
详谈判断点在多边形内的七种方法(最全面) hdu1756 hrbust1429 为例
这几天在学计算几何,学到点定位的判断点在多边形内,书上提到了三种方法,但是有些方法的代码不全。于是网上找了找,又发现更多判断的方法,一时兴起决定学习一下,看看到底有多少种,结果一个大坑。。。 网上好多介绍的不详细(特别是转角法,最后还是google出来的),而且有些方法叫不同的名字,有点难搞啊,花了我一天多的时间。。TAT话不多说,下面分享一下。有些方法我会介绍清楚但不会画图详解,希望大家自己画图原创 2017-09-15 18:23:21 · 48874 阅读 · 24 评论 -
最长上升子序列(LIS)长度 O(nlogn)算法 hdu1950为例
最长上升子序列最长上升子序列(Longest Increasing Subsequence,LIS),是指一个序列中最长的单调递增的子序列。 该问题有一个n2n^2的动态规划解法,这里介绍O(nlogn)O(nlog_n)的解法。设a[]是原序列,d[i]表示长度为i的上升子序列的最末元素,若有多个长度为i的上升子序列,则记录最小的那个最末元素。那么d[]肯定是单调递增的(后面会用到这个性质)。原创 2017-09-11 20:59:18 · 772 阅读 · 0 评论 -
划分树 图文讲解让你一次就懂 hdu2665为例
学主席树的时候看到一篇博客说是因为一个大牛当时不会划分树而想出的另一种解决区间第k小的问题,所以在学了主席树之后我就学了下划分树。 划分树解决静态区间第k小问题比主席树的时空消耗都要少,不过好像不能解决动态区间第k小问题。转载自:http://www.cnblogs.com/hchlqlz-oj-mrj/p/5744308.html这篇博客写的非常好,所以我直接转载了。划分树划分树,类似线段树,主转载 2017-09-07 23:02:16 · 746 阅读 · 0 评论 -
主席树(静态) 图文讲解让你一次就懂 hdu2665为例
主席树学了几天才算初步了解了,我先讲一下无修改即静态的主席树,之后在讲带修改即动态的主席树。主席树比较抽象,感觉很难没有图只靠文字理解。 接下来进入正题参考博客:http://www.cnblogs.com/zyf0163/p/4749042.html主席树先介绍一下主席树,主席树也称函数式线段树也称可持久化线段树。(其实就是支持查询历史版本,这个在看完之后就会了解)其实主席树就是很多线段树组合的原创 2017-09-07 18:15:16 · 7986 阅读 · 1 评论 -
hdu6058 链表+思维 2017多校第三场1003
题意 给出一个n和一个k,求1~n的每个区间的第k大的数的总和是多少,区间长度小于k的话,贡献为0。题解 因为给出的n个数是1-n的全排列,所以我们从小开始枚举第k大的值,即枚举第k大的值从1到n-k+1。剩下的值不可能有k-1个数比它大所以不可能是第k大数,贡献为0,所以不用枚举。对于每个枚举的值,从该值的位置向前找k个比它大的数的位置,向后找k个比它大的数的位置。然后就可以计算所有第k大数为原创 2017-08-02 14:54:57 · 401 阅读 · 0 评论 -
SPFA-hdu4076
SPFASPFA(Shortest Path Faster Algorithm)算法,是西南交通大学段凡丁于 1994 年发表的,其在Bellman-ford算法的基础上加上一个队列优化,减少了冗余的松弛操作,是一种高效的最短路算法。SPFA和Bellman-ford一般都是用来处理带负权的最短路问题(Dijkstra不能处理带负权回路的最短路),而SPFA是在Bellman-ford的基础上优化的原创 2017-07-23 19:23:15 · 462 阅读 · 0 评论 -
hdu5094 BFS+状态压缩
写了模板题hdu1429 http://blog.csdn.net/williamsun0122/article/details/72137116和2017华科现场赛hust1579 http://blog.csdn.net/williamsun0122/article/details/72229003之后,这题虽然又有点不同,但本质一样。应该是可以直接AC的。题意:50x50的地图,最多10个原创 2017-05-16 14:35:33 · 453 阅读 · 1 评论 -
hdu1541 树状数组
题意给你n个星星 (1<=N<=15000)和每个星星的坐标x,y(0<=X,Y<=32000),每个坐标不相同,且给出的坐标是按列序升序排列,列序相同则按行序升序排列。定义星星的等级是该星星左下角的星星个数(包括正下和正右),最后要你输出等级从0到n的星星个数。题解因为按给出的坐标的规则,前面的点一定在后面点的左面或者与它同列。所以该星星的等级即是前面星星中行序比它小的星星个数。这里有一个tric原创 2017-04-25 11:43:40 · 327 阅读 · 0 评论 -
hdu1429-BFS+状态压缩
所谓状态压缩是指状态用一种压缩的形式存储。一般采用一个二进制数表示状态,有时也用三进制或四进制数等。用二进制数表示状态最大的好处就是在判断状态时可以采用位运算,这样能极大提高算法效率。题解:这题的关键就是状态压缩。因为有最多有10把钥匙,所以我们可以用10个二进制位来保存当前位置各个钥匙的状态。把10把钥匙的状态压缩成一个2进制数。接下来BFS即可。#include <bits/stdc++.h>原创 2017-05-15 13:42:56 · 549 阅读 · 0 评论 -
hdu2642-二维树状数组 单点更新 区间查询
我之前已经把一维的树状数组都写了,接下来我来写一下二维的树状数组。其实二维的树状数组和一维的没有本质和差别,可以说就是扩展了一维,其余一样。来看看二维树状数组单点更新、区间查询的问题: 就是一个矩阵,进行两种操作。 1. 对矩阵里的某个数加上一个数 2. 查询某个子矩阵里所有数字的和我们看看树状数组是怎么扩展到二维的。和一维一样,设a[][],c[][],我们看看这时候c[][]的组成。 设原创 2017-05-11 17:02:53 · 796 阅读 · 0 评论 -
2015-ICPC-ShangHai现场赛-F-hdu5578
这是一道签到题,比较水。题意:相邻两个字母间的距离位1,找两个相同字母的最短距离,没有输出-1。 题解:我用map存字母出现的位置,当字母第二次出现时计算距离并更新答案,再把map所存字母的位置更新为现在的位置。#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <map>usi原创 2017-03-25 16:30:07 · 758 阅读 · 0 评论 -
2015-ICPC-ShangHai现场赛-L-数论-gcd
题意:有一只青蛙,它从起点(x,y)出发,每次它会走lcm(x,y)步到达点(x+lcm(x,y),y)或点(x,y+lcm(x,y)),最终,它会到达点(ex,ey),现给你终点(ex,ey),要你求出它的起点有多少种可能。题解: 首先来个公式:lcm(a,b)*gcd(a,b)=a*b 这里我简单证明一下:设a=x^k1*y^k2…,b=x^k3*y^k4…,gcd(a,b)=x^(min(原创 2017-03-25 18:17:23 · 559 阅读 · 0 评论 -
2015-ICPC-ShangHai-K-hdu5583
题意:给你一个01字符串,要求最多改变一个字符(即0->1或1->0),使相邻相同字符的平方和最大题解:其实此题还是暴力求解的,首先我们把相邻相同的字符分块(离散化),然后对于第i个分块与第i+1个分块,枚举(第i个分块字符个数+1和第i+1个分块字符个数-1)的情况与(第i个分块字符个数-1和第i+1个分块字符个数+1)的情况,需注意的是当第i+1个分块若只有一个字符,那么第i个分块、第i+1个分原创 2017-03-26 10:44:46 · 522 阅读 · 0 评论 -
归并排序-逆序对-hdu3743
归并排序方法:分治法 分解:分解待排序的n个元素的序列成各具n/2个元素的两个子序列。 解决:使用归并排序递归的排序两个子序列。 合并:合并两个已排序的子序列以产生已排序的答案。时间复杂度:O(nlog2n\log_2 n)伪代码:MERGE(A,p,q,r) n1=q-p+1 n2=r-q let L[1...n1+1原创 2017-04-07 16:23:03 · 428 阅读 · 0 评论 -
hdu1667-IDA*-迭代加深搜索 A*算法
迭代加深搜索迭代加深搜索,实质上是限定下界的深度优先搜索。即首先允许深度优先搜索K层,若没有发现可行解,再将K+1后重复以上步骤搜索(即深度优先搜索k+1层),直到搜索到可行解。在迭代加深搜索的算法中,连续的深度优先搜索被引入,每一个深度约束逐次加1,直到搜索到目标为止。可以看出,很多情况会重复搜索。但是它的好处在于:空间开销小。每个深度下实际上是一个有深度限制的深度优先搜索。而DFS的空间消耗小原创 2017-05-16 19:26:01 · 4736 阅读 · 0 评论 -
hdu1556-树状数组 一维 区间更新 单点查询
这题可以说是树状数组区间更新,单点查询的模板题。对于树状数组的区间更新,单点查询,其实就是维护一个差分数组。以该题为例:定义两个数组a[],b[]。a[]数组表示气球涂色次数,初始均为0。设b[n] = a[n] - a[n-1](即b[]数组是a[]数组的一个差分数组),因为a[]数组初始均为0,所以b[]数组初始也为0,且b[1]+b[2]+…+b[n] = a[n] - a[0] = a[n]原创 2017-05-09 21:11:27 · 443 阅读 · 0 评论 -
优先队列优化Dijkstra-hdu2066
DijkstraDijkstra算法适用于边权为正的情况,用于计算正权图上的单源最短路(Single-Source Shortest Paths,SSSP),即从单个源点出发,到所有结点的最短路。该算法同时适用于有向图和无向图。时间复杂度为O(n^2),n是节点数。算法思想: 首先初始化dist为INF=0x3f3f3f3f,dist[源点]=0,然后循环n次,在所有未标号的结点中,选出dist值原创 2017-07-24 13:29:57 · 791 阅读 · 0 评论 -
快速乘法-hdu6063-2017多校第三场1008
题意 题意很好懂,就是那个μ(i)\mu(i) 是莫比乌斯函数,其它都好懂,就是求个和。 如果还不了解莫比乌斯,参考这: http://blog.csdn.net/williamsun0122/article/details/72510788题解 这一题看起来很复杂,不好写。我之前虽然学过莫比乌斯反演,但是看到这题还是不会写。之后过的人很多,我估计就有一些规律在里面。所以我暴力跑了一下n^k原创 2017-08-01 18:43:52 · 561 阅读 · 0 评论 -
AC自动机-hdu2222
这篇博客我以hdu2222这道模版题为例详细的讲解一下AC自动机。AC自动机简介 AC自动机(Aho-Corasick automation),该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。 一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。 要学AC自动机最好先有KMP和字典树Trie的基础,AC自动机实际上就像是在Trie原创 2017-07-20 19:53:52 · 504 阅读 · 0 评论 -
KMP-hdu1711
KMPKMP算法又称“看毛片”算法,是一种效率非常高的字符串匹配算法。kmp算法完成的任务是:给定两个字符串O和f,长度分别为n和m,判断f是否在O中出现,如果出现则返回出现的位置。常规方法是遍历a的每一个位置,然后从该位置开始和b进行匹配,但是这种方法的复杂度是O(nm)。kmp算法通过一个O(m)的预处理,使匹配的复杂度降为O(n+m)。思想:我们首先用一个图来描述kmp算法的思想。在字符串O中原创 2017-07-20 19:41:35 · 2722 阅读 · 0 评论 -
字典树(Trie树)总结-hdu1251
字典树(也称前缀树,Trie)Trie树,又称单词查找树、字典树,是一种树形结构,是一种哈希树的变种,是一种用于快速检索的多叉树结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。Trie高效的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提率的目的。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。Trie树也原创 2017-05-01 16:20:13 · 648 阅读 · 0 评论 -
hdu1159 最长公共子序列 LCS
这题就是LCS的模板题,看了我写的LCS博客: http://blog.csdn.net/williamsun0122/article/details/72934196 应该直接就能AC。没什么说的,就是裸的LCS,直接贴代码:#include <bits/stdc++.h>using namespace std;const int maxn = 1e3+5;char str1[maxn],原创 2017-06-08 19:42:39 · 404 阅读 · 0 评论 -
hdu6023-Automatic Judge-2017中国大学生程序设计竞赛 - 女生专场-1001
这题主要就是考ACM的规则唉,我一直在进行ACM和类似ACM的比赛,结果规则都不是很清楚,这题我WA了几次,失败。 我写这个主要博客主要是让我自己清楚一下ACM的比赛规则。一般的规则我们都很清楚了,现在说一下我之前不是很清楚的。已经AC的题不管你之后怎么提交都不影响你的时间。交的代码没AC的一次会罚时20分钟。上面的罚时是错的题罚时,如果该题每过不计入你的时间,该题过了则一并计入你的时间。详细见代原创 2017-05-08 20:03:18 · 1533 阅读 · 0 评论 -
hdu1695 莫比乌斯反演
题意从区间[1,B]选择一个x,从区间[1,D]选择一个数y,使得gcd(x,y)==k 的方案数。(1,3)和(3,1)算同一个。题解之前莫比乌斯反演总结:http://blog.csdn.net/williamsun0122/article/details/72510788 已经把所需知识介绍的很清楚了,接下来看看怎么应用。这里我们设B < D(如果不是,你可以交换一下使之成立)首先我们把所求原创 2017-05-19 10:34:31 · 313 阅读 · 0 评论 -
hdu2948 简单计算几何 判断点在三角形 矩形 圆形内
题意本质就是如标题说的计算几何。 两个人玩飞镖游戏,给出了一些形状的靶,每场比赛每个人投掷3次飞镖(Bob先手,Hannah后手),一个飞镖的得分为其在多少个靶上,最后输出获胜人的名字,平局输出Tied。 先给出一个数s代表靶的个数,之后s行代表靶。C代表圆形靶,给出圆心坐标和半径长度;R代表矩形靶,给出对角顶点的坐标x1 < x2 and y1 < y2;T代表三角形靶,给出三个点的坐标。原创 2017-09-12 21:07:06 · 1319 阅读 · 0 评论