- 博客(373)
- 收藏
- 关注
原创 主席树(Lights,HDU 5820)
一开始考虑用二维树状数组,写到一半发现开不下空间。全局数组变量最多能开5e8个int的空间。题目限制大概5e7个int的空间。点的坐标范围是[1,5e4],如果用一个二维树状数组去维护的话需要开5e4*5e4=2.5e9的空间,开不下来,也远超了题目限制。点的个数为5e5,如果空间能够开下来的话时间复杂度是O(nlog^2x),可以接受的。平时没怎么关注空间复杂度,一般ML
2017-07-28 19:42:31
507
原创 主席树(Kth number,HDU 2665)
题目链接:https://vjudge.net/problem/HDU-2665参考博客:http://blog.csdn.net/acdreamers/article/details/8656644感觉网上的资料不是很好,讲得也模糊,模板也没有。还是大致看一下原理,然后通过模板题及代码来学习比较有效。原理的话大白书P397那一段介绍挺好的,后面的图也挺直观的。当然网上搜罗一下
2017-07-28 19:32:43
585
原创 memset和循环的比较
经过测试,对于1e8的数组,memset比循环快一倍左右。但是如果有n个数组需要清零,memset只能一个一个清零,但是循环可以一次性清零。当n>2时,循环比memset好。#include#include#includeusing namespace std;const int maxn = 1e8;double s,e;int A[maxn];int B[m
2017-07-28 10:02:37
4098
2
原创 动态规划(Hearthstone,HDU 5816)
看到N,M都很小,一开始想到了暴力搜索+剪枝可以枚举出能够完成击杀的牌的组合,计算量最多为2^20=1e6,(看到网上用状压来枚举,虽然不带剪枝,但是常数应该更小)。然后在深入考虑预估函数的剪枝效率时,发现P也很小,好像可以动态规划。dp[i][j][k]表示对于前i张火球术,恰选j张,恰打出k点伤害的概率,dp完后后缀和一下就可以得到前i张火球术,恰选j张,打出大于等于k点伤害的概率。
2017-07-27 20:21:55
384
原创 贪心(Elegant Construction,HDU 5813)
很容易想到按ai排序。然后ai>i就不行。然后就往前面连,保证恰好能到达ai个点。看了官方题解就是往前a[i]个点都连边就好了。由于有向无环,所以不可能到达比a[i]大的点,而小于等于a[i]的点我们又全都到达了。我只想到了一个比较复杂的方法,算法错了,又改才对了。就是讨论,如果a[i]=a[i-1]+1,那就直接连到i-1如果a[i]=a[i-1],那就跟
2017-07-26 19:14:33
298
原创 模拟(Joint Stacks,HDU 5818)
很容易想到用set来模拟。看到网上大部分人都用优先队列。优先队列和set的唯一区别就是优先队列不可以删除中间的元素,但是set可以。所以优先队列可以完成的功能set也可以完成。只不过优先队列封装得更好,使用起来更方便。感觉这道题目时间复杂度都不知道该怎么估计。第8场的多校题目数据范围说得很详细,有多少组大数据,多少组小数据之类的。这题就说有多组,也不知道有多少,
2017-07-26 18:58:42
256
原创 数学,期望(Balls and Boxes,HDU 5810)
本题是半推半猜做出来的。n个球放到m个盒子。第i个盒子有Xi个球。可知Xi~b(n,1/m)E(Xi)=n/mVar(Xi)=n(m-1)/m^2如果Xi相互独立,那么Xi可以看成第i次独立重复实验随机变量X的值,其中X~b(n,1/m)那么V=∑mi=1(Xi−X¯)2m就是对X方差的无偏估计。(已知均值,所以分母不是m-1)关于样本均值和总体均值:https
2017-07-26 17:58:19
296
原创 线段树,区间开方(Rikka with Sequence,HDU 5828)
题目链接:https://vjudge.net/problem/HDU-5828参考博客:http://www.cnblogs.com/forever97/p/hdu5828.htmlhttp://blog.csdn.net/zzz805/article/details/52193127区间开方不好维护,但是多次开方后区间极差会快速降低到小于等于1。我们在区间极差大于1
2017-07-25 22:07:37
481
原创 贪心(Ball,HDU 5821)
又是很多人都做出来了的题目,自己却没有做出来。主要是思维上的障碍。一方面自己应该想好了再来写。确定好时间复杂度,正确性,编码复杂度。有一定把握了再来写代码。一开始想了个大概,然后开始写,一边写一边想,代码的讨论很复杂,写完后自己的数据过不了,改了很久,然后感觉讨论不清了,然后觉得交一发WA算了。然后交上去TLE,然后发现时间复杂度O(n^3)。少动键盘吧。
2017-07-25 19:36:33
327
原创 物理题(physics,HDU 5826)
高中物理题:汽车以恒定功率启动。https://www.zybang.com/question/3a5bdab5c8422ba094cba86fb5dcdcdc.html用到一些积分技巧。还有大白书P9的一道思维题——蚂蚁http://blog.csdn.net/xl2015190026/article/details/52909647代码#include
2017-07-25 17:52:15
353
原创 贪心,括号序列(Rikka with Parenthesis II,HDU 5831)
判断一个括号序列是否合法,可以用栈来模拟。就是左括号入栈,如果遇到右括号,但栈空或者不匹配那就错了。如果最后栈空也错了。本题只有一种括号,可以直接O(n)扫一遍判断。一开始cnt=0左括号cnt++右括号cnt--如果cnt为负,那就错了。如果最后cnt不为0,那也错了。或者说,首先左右括号的个数要相等。而且对任意的下标k,其左边的左括号数一定要
2017-07-25 17:41:31
397
原创 矩阵快速幂,动态规划(cjj's string game,HDU 5863)
一开始考虑后缀数组。但有两个原因感觉不行。1、没有一个给定的串让我来处理成后缀数组。2、发现n很大,1e9,但m很小才10。时空完全无法承受。然后考虑计算出来。很容易想到让第一个串随便组合,然后尝试让第二个串满足它。对于任意一个串,要求另一个串满足它的方案数都是一样多的。满足的条件只关乎每个下标上的字符是否相等。显然和具体字符无关,只和字符的种数有关,所以方
2017-07-23 22:21:52
403
原创 二分,讨论(Median,HDU 5857)
感觉这场多校的题目不是小学数学就是初中英语,而且我都不会。。我用二分做的,WA了很久,最后靠对拍过的。如果用二分做的话细节太多了,很容易出错。看到网上大部分解法都是讨论。以后应该要给自己找一个实现起来比较简单的算法。代码#include#includeusing namespace std;const int maxn = 100010;int
2017-07-23 19:44:44
254
原创 数学题(Hard problem,HDU 5858)
样例给的那个0.29就是面积的比例嘛,如果知道精确的比例,乘以面积就是答案了。只不过小数点后面还有8位需要确定。。。题目说这是一道小学奥数题,我感觉这难度怎么说也应该是初中奥数题吧。思考了一会然后发现自己竟然连小学奥数题都不会做。然后我就开始思考自己和小学生究竟有什么区别。然后开始思考数学竞赛和算法竞赛究竟有什么区别。然后觉得可以尝试用投点法来模拟出这个面积的比例。然后跑了
2017-07-23 19:31:34
314
原创 水题(Water problem,HDU 5867)
通过数最多的题目,但是我却后面才做出来。自己写代码确实有太多失误,到头来很难查错。而且题目也确实是看错了,样例过不了,然后又理解错题意了。其实根本就没有仔细看,第二句话我直接就无视了,只关注了题目大意。感觉自己做题太浪了吧。。。不靠谱的人什么事都做不好的。不过本题主要也是因为在网上搜到了错误的拼写。https://www.zybang.com/question/
2017-07-23 19:13:07
359
原创 统计,优化(Counting Intersections,HDU 5862)
类似的统计问题有很多,大概都是用某种循序枚举一个量,然后用数据结构(线段树或树状数组)或堆(set,map或优先队列)等来维护一些东西,然后快速计算出结果。想起了很久以前没做出来的一道题目:http://blog.csdn.net/xl2015190026/article/details/52679699具体就是横竖线分开考虑,对所有纵坐标离散化。对横线按最左端升序排序。对
2017-07-23 18:51:50
310
原创 整体二分,区间第K小(CRB and Queries,HDU 5412)
题目链接:https://vjudge.net/problem/HDU-5412静态区间第K小,可以使用主席树或整体二分。动态区间第K小,可以使用树套树或整体二分。参考博客:http://blog.csdn.net/v5zsq/article/details/50775827代码#includeusing namespace std;const in
2017-07-23 11:24:37
427
原创 前缀和,LCA(CRB and Tree,HDU 5416)
首先要知道树上最短路公式(树上两点间距离公式):记dis[u]为根节点到u节点的距离。dist(u,v) = dis[u] + dis[v] - 2 * dis[lca(u, v)]如果距离的定义改为异或和。那么公式就改为dist(u,v) = dis[u] ^ dis[v]剩下的问题就比较好解决了。值得注意的是计算无序对的时候,有时
2017-07-23 09:49:42
295
原创 数论(CRB and Candies,HDU 5407)
题目链接:https://vjudge.net/problem/HDU-5407暴力打了个表,感觉找不到什么规律。1231210601052802522520231027720257402402445045720720想把整个表全部打完估计要一整天。然后规律是g[i]=lcm(1,2,...,i
2017-07-22 21:26:40
291
原创 矩阵快速幂(CRB and Puzzle,HDU 5411)
如果A是邻接矩阵,且i与j之间有A[i][j]条直接相连的道路。那么A^k就是k长路矩阵,i与j之间有A^k[i][j]条k长的路。题目要求小于等于M的道路的个数,对2015取模。即∑∑∑A^k[i][j]%20151考虑计算出一个矩阵B[k],其中i与j之间有B[k][i][j]条小于等于k长的道路。那么B[k+1]=B[k]*A+A但是每次矩阵乘法之后都要加
2017-07-22 18:10:21
319
原创 贪心,模拟,构造(HDU 5414,CRB and String)
WA了好久。。No写成了NOYes写成了YES读题:没问题算法:光是正确构造出来一个结果是远远不够的,我们更应该考虑在构造的过程中所使用的算法(比如贪心)是否会使得后面的构造失败。实现:没问题细节:No写成了NO,Yes写成了YES代码#include#include#includeusing namespace std;const in
2017-07-22 14:16:48
268
原创 动态规划,背包问题,卡题(CRB and His Birthday,HDU 5410)
题目链接:https://vjudge.net/problem/HDU-5410以前学习过一种解法。用完全背包的方法来做多重背包的题目。博客链接:http://blog.csdn.net/xl2015190026/article/details/54583263其中用到了一个used数组。由于转移只有一种,而且前置状态越大越好,所以这种做法是正确的。一开
2017-07-22 12:33:20
294
原创 LCT(GCD Tree,HDU 5398)
值得注意的是,千万别把LCT的结构当成真实的树的结构。题目链接:https://vjudge.net/problem/HDU-5398就是要快速求两点间路径上距离最短的边。比如求u和v。那就先mroot(u),使u成为根。然后再access(v),打通u,v之间的路径,使得u和v在同一棵Auxiliary Tree中。此时u是第一个值,v是最后一个值。这棵A
2017-07-21 19:41:23
288
原创 LCT(Bounce 弹飞绵羊,BZOJ 2002)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2002参考博客:http://blog.csdn.net/wzq_qwq/article/details/47397539http://blog.csdn.net/saramanda/article/details/55210418http://blog.cs
2017-07-21 14:25:30
243
原创 LCT(Cave 洞穴勘测,BZOJ 2049)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2049第一次写LCTLCT介绍:http://blog.csdn.net/saramanda/article/details/55253627http://blog.csdn.net/d891320478/article/details/9181385
2017-07-17 18:44:46
254
原创 动态规划,计数DP,模拟(Persistent Link/cut Tree,HDU 5401)
题目链接:https://vjudge.net/problem/HDU-5401系统相对比较复杂的动态规划,所以看上去有点像模拟。参考博客:http://blog.csdn.net/u013007900/article/details/47760825TEL了好久。原因是使用了stl的map,被卡了常数。stl的map的常数大概是自己实现trea
2017-07-17 12:56:57
279
原创 规律,模拟,贪心(Travelling Salesman Problem,HDU 5402)
显然行列有一个是奇数就可以全部走完。这种情况直接模拟就好。否则的话,一定会有一个格子走不到。多试几种情况就可以发现这个规律。证明的话:http://blog.csdn.net/queuelovestack/article/details/47756605就是对整个棋盘进行黑白二染色,如果行列相加为偶数,就染成黑色,否则染成白色。我们的路径一定是黑白相间。当行列皆为偶数的时候我们
2017-07-16 20:13:35
262
原创 区间DP,组合数学(Expression,HDU 5396)
dp[i][j]表示区间[i,j]的答案。如果区间长度为len,那么这个区间的答案一定是经过len-1次操作得到的。所以我们从长度为len的区间转移向长度为len+1的区间时,需要枚举一个符号,这个符号就是第len次操作使用的符号。每个符号求到的答案加起来就是这个区间的答案。假设现在我们关注符号p。符号左边有a种情况,第i种为A[i],符号右边有b种情况,第j种为B[j]。如果符号
2017-07-16 19:47:22
288
原创 贪心,Dijkstra(The path,HDU 5385)
贪心构造距离,Dijkstra构造边。有一些细节写错了,在遍历边的时候,把e.v写成了i,WA了一段时间。一开始写代码的时候就要小心。代码#include#include#includeusing namespace std;const int maxn = 100010;const int inf = 0x3f3f3f3f;int n,m;in
2017-07-16 12:48:49
196
原创 莫队算法,gcd(The sum of gcd,HDU 5381)
有一个小失误,WA了很久。转移的顺序应该是①增加r②减少l③减少r④增加l否则可能会出现错误比如想从[a,b]转移到[c,d]但是c如果顺序不对的话,按照我自己的算法,就会算错。代码#include#include#include#includeusing namespace std;typedef long long ll;
2017-07-16 11:20:45
246
原创 莫队算法(小Z的袜子,BZOJ 2038)
参考博客:http://blog.csdn.net/xym_csdn/article/details/50889293代码#include#include#includeusing namespace std;typedef long long ll;const int maxn = 50010;int N,M;int c[maxn];int n[maxn
2017-07-15 17:13:54
235
原创 树形DP,计数DP,概率DP(HDU 5378,Leader in Tree Land)
参考博客http://blog.csdn.net/firenet1/article/details/47445921http://blog.csdn.net/pibaixinghei/article/details/52783432有两种方法,一种是计数DP,另一种是概率DP。计数DP:应该都能想到dp[i][j]表示以i为根的子树,有j个领导。接下来考虑状
2017-07-14 16:36:46
522
原创 树状数组,离散化,突破口(Segment Game,HDU 5372)
树状数组讲解:http://blog.csdn.net/int64ago/article/details/7429868经常会遇到一些题目,是一些经典问题的变化,但是各种经典算法无法很好的解决这个问题。这时我们应该观察题目是不是有特殊的地方,我们的经典算法是否只能解决更一般的问题。特殊和一般在哪些地方有差别,哪些地方条件放宽了,哪些地方要求高了。然后从这些差别入手,或许
2017-07-14 11:19:40
241
原创 Manacher算法(Hotaru's problem,HDU 5371)
学习了Manacher算法Manacher算法的介绍:https://segmentfault.com/a/1190000003914228Manacher算法的例题:https://vjudge.net/problem/HDU-3068例题代码#include#include#includeusing namespace std;const
2017-07-13 20:19:12
272
原创 数学题(First One,HDU 5358)
学习一下吧。参考博客:http://blog.csdn.net/u013007900/article/details/47323347http://bestcoder.hdu.edu.cn/blog/2015-multi-university-training-contest-6-solutions-by-zju/http://www.cnblogs.com/yfceshi/p/6
2017-07-13 10:24:29
270
原创 前缀和,枚举+递推(Average,HDU 5353)
有n个节点,1瞬间就想起了Money Transfers这类问题一般都可以转化为环的切割,如何求出切割呢?可以求一个前缀和,如果sum[j]==sum[i](i我们会找到很多个sum的值,每一种值对应一个切割方法,值所对应的的多个节点就都是切割点。在本题我们就通过前缀和找到所有切割,然后对于每一段,可以直接贪心模拟看看是否ok。看了下官方题解
2017-07-12 13:23:18
295
原创 暴力(Cake,HDU 5355)
一开始看到那么多人过,AC率还那么高,所以认为应该是一道水题,所以就直接贪心,但是过不了,然后尝试用assert来debug,发现不出任何问题,然后就不会做了。原因是:1、这道题目的数据赛后修改过,在改之前确实是一道水题,贪心的方法是可以AC的,但是改过之后大部分AC的代码都被卡了。说句实话修改后这道题目不算太简单。2、理论上来讲如果assert(false)被触发,判题程序应该返回R
2017-07-12 09:53:45
255
原创 线段树优化连边,Dijkstra(In Touch,HDU 5361)
第二次被vector卡空间。。。但凡用到了vector,空间复杂度就别想算对了。。。以后少用vector,多用链式前向星。(特别是空间比较紧的时候)还有一些实现上的失误,a=max(1,i-R[i]);b=max(1,i-L[i]);改成a=i-R[i];b=i-L[i];就对了,因为前面的代码会导致不一样的结果。对于这种问题,我只能说对于那些比
2017-07-10 21:37:45
488
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人