思路++
文章平均质量分 55
帐下幕僚
我只是一个普普通通的大学学生,我来到这里是想获得我在学校所不能得到的知识。
展开
-
hdu4746 Mophues(莫比乌斯反演)-好题
hdu 1695 http://blog.csdn.net/abc13068938939/article/details/52198163 BZOJ 2301 http://blog.csdn.net/abc13068938939/article/details/52201090 BZOJ 2818 http://blog.csdn.net/abc13068938939/article/d原创 2016-08-17 16:06:39 · 384 阅读 · 0 评论 -
线段树进阶学习(例题)--树状数组学习+离散化+成端更新+区间合并+扫描线
树状数组一、树状数组简介 树状数组(Binary Indexed Trees,简称BIT)是一种特殊的数据结构,这种数据结构的时空复杂度和线段树相似,但是它的系数要小得多。它可以方便地查询出一段区间中的数字之和。其查询和修改的时间复杂度均为O(lbN),并且是一个在线的数据结构,可以随时修改并查询。我接下来用一道题目来介绍树状数组的几个基本操作。 【引例】 假设有一列数{Ai}(1<=i<原创 2016-07-26 17:39:41 · 2211 阅读 · 0 评论 -
POJ2331Water pipe(IDA*)
本来用哈弗曼距离作为h函数,T了。看了大神的博客才知道要先对x轴,y轴预处理h函数。也就是对于终点的ed.x,要在0#include <iostream>#include <stdio.h>#include <algorithm>#include <stdlib.h>#include <stack>#include <vector>#include <string.h>#include原创 2016-08-12 23:49:55 · 327 阅读 · 0 评论 -
bnu52297Coins(弱校联盟第一场)--找规律
比赛的时候不会,看题解补题的。 if a >= 2 那么1可以由一个1表示,2可以由两个1表示,这样 1 ~ 3c 范围内的所有数都能被表示,同理3c + 1 ~ 3c + 2b范围内的所有数也可以被表示,3c + 2b + 1 ~ 3c + 2b + a范围内的所有数也可以被表示。 elif a == 1 if b >= 2 那么1~3原创 2016-10-04 10:37:45 · 307 阅读 · 0 评论 -
hihocoder 1251 Today Is a Rainy Day( 2015北京区域赛C题)
首先两种操作,一次性执行完2操作,最后再用1操作比混合着用1操作快。 所以先处理一次性执行操作完2操作, 也就是由123456 –> a1,a2,a3,a4,a5,a6 最多6 ** 6种转移 bfs预处理 最后再执行1操作,但不能每次都比较一次原序列和经过一系列2操作的现在的序列,需要一点技巧。(Tle了4发) 对于每一个数字k,统计它在the final list出现的次数c[原创 2016-10-28 22:19:19 · 458 阅读 · 0 评论 -
ccpc杭州K题(hdu5943) Kingdom of Obsession
首先如果s+1~s+n中有两个数是素数,那么肯定是no;也就是如果1~2e9中素数的最大距离如果是m,那当n>m时就不成立了。(其实上这有一点问题) 我直接假设m=1000,事实上m比500还要小。 那么现在问题就降为 1≤T≤100. 1≤n≤1000. 0≤s≤1e9. 那么问题就很简单了,如果s+k是某个i的倍数,那么s+k就是可能和i进行匹配(1可以和任何一个数匹配)。然后找最大原创 2016-10-29 19:19:32 · 497 阅读 · 0 评论 -
hdu5114 Collision(一元同余方程)
推了一晚上,还是没发现问题会转化成同余方程。 为了避免小数,所有点坐标*2 对于这种题,感觉应先考虑一维的情况, x1,x2,[0,x0],方向1 那么if x1==x2,就直接相撞 else 设移动tx步 不妨对x2做对称,则x2变为2k*x0-x2,此时方向为-1 则 x1+1* tx=2k* x0-x2+(-1)* tx 即原创 2016-09-30 20:31:31 · 440 阅读 · 4 评论 -
cf343dWater Tree(dfs序)
三个操作: 1. 将u及其子树全部灌水,子树就是dfs序in[u]和out[u]中间那一部分 2. 将u及其祖先排水,暴力搞tle了,一点小优化仍然tle,其实只需要将u单点排水即可,因为询问u时,如果u或u的子树的某个节点是空的,那么u一定也应该是排水的(只是没有将它排水,排水的话就超时了)。 3. 询问u时,检查u及u的子树是否全部灌水了。 但,由于操作2,比如样例中的那棵树, 先1号原创 2016-11-18 23:22:17 · 492 阅读 · 0 评论 -
hihocoder1391Countries(2016北京网络赛)
对于每一个导弹,预处理出A需要的防御区间范围(对于从A发出的导弹,如果到达B的时间没有没有在 x , x+TB内,则这颗导弹一定不会打到A,所以既可以去掉。)。当且仅当 导弹i的防御区间范围含于 A的防御有效区间(未知) 内时,导弹i不会打到A.然后问题就成了,选取某个长度为 TA 的连续区间K(即A的有效防御区间),使得K包含的那些导弹的防御区间对应的伤害值最大。 做法: 预处理出来所有导弹的防原创 2016-12-23 23:28:23 · 309 阅读 · 0 评论 -
CodeForces749D(Leaving Auction) 二分二分二分
题意: 将会有 n 个人在竞价,一共叫了 n 次价(价格递增)。一个人可以叫多次价,但不会自己压自己的价 (例如 1 1 \n 1 2 这是不会出现的),当然也就会出现有的人没叫价。 现在有 q 个询问,每个询问为 有 k 个人没来,分别为 li ,现在求最后的winner和价格。 (所有的 k 加起来 < 200000)。 思路: 考虑第一小问,如果我们把每个人叫的最高价记录原创 2017-01-07 13:27:09 · 412 阅读 · 0 评论 -
[CodeForces-325D] [Problem E]Reclamation
思路: 判断海的一个地方是否能填就相当于判断填了之后上下两块陆地能否四连通的连起来,也就相当于所有填成的海地(包括当前判断是否能填的这块)是否能八连通地围绕这圆柱体围成一个圈。 本来是 r * c。 补成 r * 2c 。 填每块海地时,要填 (ri,ci)和 (ri,ci+c)。如果所有填成的海地(包括当前判断是否能填的这块)是否能八连通地围绕这圆柱体围成一个圈,则 (ri,ci)和(ri原创 2016-12-31 16:36:04 · 375 阅读 · 0 评论 -
hdu4370题解(0 or 1)
看完题意一脸茫然=。= 还是看神犇的博客懂的。 原文地址:http://www.cnblogs.com/kuangbin/archive/2012/08/17/2644557.html显然,题目给的是一个0/1规划模型。思维题,由一道让人不知如何下手的题,转换为了最短路解题的关键在于如何看出这个模型的本质。3个条件明显在刻画未知数之间的关系,从图论的角度思考问题,容易得到下面3个结论:1.X12原创 2016-08-08 15:23:41 · 306 阅读 · 0 评论 -
hdu2430Beans(单调队列)
看好几篇题解都不知道怎么做!先抄一遍代码再说,好像发现了点问题,构造了一个多小时的数据,再想,再想,懂啦!!!———————————————————————-题意: a[1], a[2], …, a[n] 取连续的一段(至少取一个),使得 (a[i+1] + a[i+2] + … + a[j]) % p <= k, 并且 (a[i+1] + a[i+2] + … + a[j])最大。 先原创 2017-02-27 23:45:51 · 475 阅读 · 1 评论 -
hdu5571Triple(二维树状数组)
题意: 有二元组集{(a,b)}和三元组集{(c,d,e)}。当 (a,b)和(c,d,e) 满足 b==e 时,(a,c,d)组成新的三元组集 C {(a,b,c)}。 计算三元组集 C 中 满足 不存在除与本身相等外满足(u>=a,v>=b,w>=c)的三元组(u,v,w) 的三元组(a,b,c)。 思路: 自己写的时候完全没有思路啊~ 参考了http://async.icpc-c原创 2017-02-13 13:13:59 · 381 阅读 · 0 评论 -
poj1360(完全背包+多重背包+鸽巢原理)
题意,fj去买价格为t的物品, shopkeeper只接受n种货币,价值分别vi,对于每种货币fj有ci个,但 shopkeeper都有无数个这种货币。求最少使用多少货币完成交易。 对于fj,进行一次多重背包, 对 shopkeeper,进行一次完全背包。 最重要的是要考虑上界, 鸽巢原理: fj最多支付maxv*maxv+t, shopkeeper最多找零maxv *maxv。 证明:原创 2016-08-24 11:38:13 · 441 阅读 · 0 评论 -
hdu3535AreYouBusy(分组背包问题)
常见的有三种, 一,每组最多取一个, 一维数组的伪代码 for 所有的组k for v = V to 0 for 所有的i属于组k f[v] = max{f[v], f[v -c[i]] + w[i]} 注意顺序不能写反,因为要限制每组最多取一个 二,每组任意取 既然上面的顺序是限制每组最多取一个,那调换一下顺序即可,其实就是01原创 2016-08-23 22:56:49 · 326 阅读 · 0 评论 -
poj3685Matrix(二分)
看到题完全没想到是二分(太弱,太渣了),别人告诉本弱这道题是二分依旧不会做。 思路:二分答案ans,然后枚举j,然后再二分i,求出矩阵中小于等于ans元素的个数…… 注意二分时如果l或r出现负数,最好直接向下取整,否则如(-1+0)/2=0,本来是想让他等于-1的,这样就可能进入死循环。#include <iostream>#include <stdio.h>#include <algori原创 2016-08-23 09:45:54 · 511 阅读 · 0 评论 -
cf645c Money Transfers(贪心)
想了很久,隔了一段时间,又想了很久,还是不会,看别人的代码,简直吓哭了。。。。。。妙,题意相当于: 给定一个区间[1,n],区间首尾相连,最多把它分成几块,使得每一块的和都是0.(假设答案是p,那么n-p就是这道题的答案) 所以维护一个前缀和,然后前缀和出现的最多次数就是答案, 突然觉得好蠢。。。。。。#include <iostream>#include <stdio.h>#includ原创 2016-08-29 19:14:16 · 424 阅读 · 0 评论 -
hdu4430 Yukari's Birthday(二分)
题意: 给定一个n,计算满足x^1+x^2+……+x^r=n且使x*r最小(如果有多个,取r最小的那个)的x,r值。 由于2^40大于1e12,所以我们可以枚举r从1到40,但这样可能会超时,所以可以根据3^26大于2e12,我们可以枚举r从1到26,并单独计算x=2的情况。 对于给定的每个r,x^1+x^2+……+x^r这个式子就关于x单调递增,所以就可以用二分来做。#include <io原创 2016-08-29 20:32:34 · 390 阅读 · 0 评论 -
poj2296 Map Labeler(2-sat+二分)
由于每个点要么在label的顶边或者在label的底边且在中间,并且有且只有一个在label上,所以就可以转化为2-sat问题。 建图如下: 不妨设 点yi<=yj。(i表示向下,!i表示向上) if(|xi-xj|>=d) continue; if(yj-yi>=2*d) continue; if(yj-ji>=d) i||!j else if(yj-ji>0) i&&!j e原创 2016-08-30 15:57:36 · 276 阅读 · 0 评论 -
poj3694Networks(边双连通分量+缩点+LCA)
首先求出所有边双连通分量,缩点后得到一棵树。之后每次加边就将边上两个点(新树的点)到他们lca路径上的桥去掉。 由于用边代表桥比较麻烦,所以在后面处理时是以边的终点标记桥。#include <iostream>#include <stdio.h>#include <algorithm>#include <stdlib.h>#include <stack>#include <vector>原创 2016-08-20 17:34:32 · 258 阅读 · 0 评论 -
uva1410题解Warfare And Logistics(LA4080)(最短路)
太渣,看了觉得可以做然后敲着敲着又觉得肯定超时。 看了大牛的博客才慢慢懂。 http://blog.csdn.net/nealgavin/article/details/9264185 这道题意不难理解,先求 n次最短路,计算最开始的和sum_ft。 然后删除每条边重新计算,但是如果没有没什么技巧来优化肯定是超时。 利用第一次求出来的结果并标记在求以i为源点时用到的边,这样接下来去除边的原创 2016-08-08 20:04:22 · 274 阅读 · 0 评论 -
hdu4725(The Shortest Path in Nya Graph)最短路
这道题数据范围比较大,如果暴力建图肯定T了,需要一点小技巧,本人太渣,看了大牛的博客才懂的。 kuang神 有两种思路思路1,拆点增加2n个点,也就是每层变成两个点。 n+2* i-1->n+2 *(i+1) ,路权为c;即指向上一层 n+2*(i+1)-1->n+2 * i ,路权为c;即指向下一层如果i属于u层, 则 i->n+2*u-1,路权为零,入层 n+2*u->i,路权为零原创 2016-08-08 15:15:46 · 303 阅读 · 0 评论 -
poj1062昂贵的聘礼(题解)最短路
这道题数据范围好隐蔽=。=其实是本人太渣 暴力枚举[k,k+m]。最多枚举不过百次。#include <iostream>#include <stdio.h>#include <algorithm>#include <stdlib.h>#include <stack>#include <vector>#include <string.h>#include <queue>#defin原创 2016-08-07 19:01:07 · 289 阅读 · 0 评论 -
差分约束系统学习+例题(poj3159,poj3169,poj1201)
再次强调,转载请注明出处!!!差分约束系统差分约束系统是线性规划问题的一种。在一个差分约束系统中,线性规划矩阵A的每一行包含一个1和一个-1,A的所有其他元素都为0。因此AX<=B给出的差分约束条件是m个差分约束集合,其中包括n个未知元。每个约束条件为如下形式的简单线性不等式:xj-xi<=bk,其中1<=i,j,<=n;1<=k<=m。 通过观察不难发现:每个约束条件的不等式与求单源最短路径算法原创 2016-08-07 11:05:53 · 812 阅读 · 0 评论 -
poj1182(食物链)----带权并查集
这道题,刚开始开了3个并查集,各种关系把我搞得头晕,已提交就是wa,怎么也找不出错误,上网查题解发现是并查集姿势不对!!! 只需开一个并查集,只要能确定关系就扔进并查集里,其中每个元素与老大哥的关系无非三种:同类,被吃,吃人,分别用0,1,2来表示。 那么每来一次判断,先判断两个是否有关系,没关系就肯定是真话,join; 否则就得判断是否说谎; d==1且ta与tb是同类,没说谎 d==2原创 2016-07-23 11:19:08 · 360 阅读 · 0 评论 -
poj1952(BUY LOW,BUY LOWER)(dp记录方案个数)
简单说一下题意,就是求最长递减子序列,并且!!!求出总共有多少个不同的最长子序列,比如 9 99 100 97 100 97 100 101 98 96 这组样例中的最长递减子序列长度为3, (用pi表示位于第i个) p2,p3,p9和p2,p5,p9和p4,p5,p9就只能算一个(因为都是100,97,96)。 刚做这道题也是没有什么思路,就直接先敲代码实现全部最长子序列个数(包括相同原创 2016-07-21 16:00:17 · 507 阅读 · 0 评论 -
UVALive - 4618 Wormholes(负环)
自己用SPFA做,T了。刚开始还不相信,N<=50,(井底之蛙的集中体现).看了大牛博客看了很久,我做题思路基本上是剽窃的。 大牛博客链接 http://blog.csdn.net/L123012013048/article/details/47820453 这道题主要是要处理负环,但这个负环很特殊,跑着跑着负环就没了。 eg. 本来的负环的某个虫洞的到达时间小于虫洞的生成时间,那么负环就消失原创 2016-08-09 20:00:46 · 322 阅读 · 0 评论 -
uva11090 Going in Cycle!!题解(负环)
本来以为是Floyd求最小环的模板题,然而,然而,似乎不是。但其实这道题求的是边权平均值最小的环,所以貌似不能用Floyd,因为它不一定能遍历 图中所有的环,多么痛的领悟,一个晚上,调不出来。 也或许是我姿势不对。(代码在最后面,有大神能指出我错在哪里,必万分感谢) 正确做法:二分+SPFA 二分答案,将所有边权减去二分的那个值,然后spfa判断是否有负环, 如果存在负环说明当前值太大了,原创 2016-08-09 23:01:24 · 287 阅读 · 0 评论 -
poj3207 Ikki's Story IV - Panda's Trick(2-sat)
看了半天,看不懂题意。 题意 在一个圆上分布有n个点,现在要在这n个点之间连上m条边,每条边可以从圆内连接,也可以在圆外连接,每个点只能连接一条边,求是否存在连接方案能使得这m条边不相交。 看图容易懂题意。。。。。。 那么 对于两条线(这道题的节点可以认为是线,i<<1表示第i条线外连,i<<1|1表示第i条线内连。),矛盾的必要条件是(不妨设line[i].a< line[j].a原创 2016-08-22 16:03:19 · 327 阅读 · 0 评论 -
The xor-longest Path ( POJ - 3764)
题意: 求树上的最长xor简单路径,即以 u,v 为端点的一条简单路径,使路径上全部边权的异或和(记为f(u,v))最大。 由于 f(u,v)=f(0,u)^f(0,v),所以先求出所有节点与根0 的简单路径的异或和,然后问题就转化为 n 个数中选两个数是它们异或和最大。用字典树实现,边插入边计算。从 最高位31 到 最低位0 ,尽量取与插入的数 位上不同。(贪心!)#include <iostre原创 2017-01-27 19:45:27 · 290 阅读 · 0 评论