- 博客(369)
- 收藏
- 关注
原创 Mark website
CSS :基础:http://learn.shayhowe.com/html-css/布局:http://zh.learnlayout.com/
2015-03-16 18:18:19 657
原创 基础图论算法导引
ACM中常用图论算法1. 拓扑排序 -> 拓扑排序的原理及其实现2. 最短路径算法 -> 最短路算法总结 差分约束系统 -> 差分约束 前k短路 -> 前K短路径问题3. 最小生成树问题扩展 -> 最小生成树问题的拓展 最优比率生成树 -> 最优比率生成树 最小k度限制生成树 -> IOI2004国家集训队论文,由汪汀所著(网盘
2014-08-18 19:14:34 1533 2
原创 图论小知识
/******************************************* 邻接表 储存图 空间复杂度O(m+n) 时间复杂度O(m) 优点: 缺点:********************************************/#include#define MAXN 1111#define MAXM 1111int head[MA
2014-07-04 21:36:16 1036
原创 【树的分治】 HDU 4670 Cube number on a tree
点击打开链接可将点权转化为三进制树的分治:根据子树的节点数最小 求出树的重心 保证了复杂度尽量小对于重心节点 的一棵子树搜一遍得到所有到那个子结点的权值积 与已经搜过的权值积 相乘 然后计算答案#include#include#include#include#include#includeusing namespace std;typedef long l
2015-12-17 22:30:50 639
原创 【博弈】 HDU 2516 取石子游戏 斐波那契博弈
点击打开链接斐波那契博弈,类似NIM博弈点击打开链接//#include#include#include#include#include#includeusing namespace std;typedef long long LL;const int INF = 1<<30;int main(){ int n; int f[123];
2015-12-09 20:19:53 503
原创 【DP】 HDU 3229 Jinyuetuan Puzzle
点击打开链接题意: 7个键的劲乐团。给出每个键出现要敲打键盘的时间。 然后再给出K个不能同时按的状态 比如 11110000不能按那么11110100也是不能按的。。对于单音正确的时间敲到得一分对于长音开始的时间敲到得一分 ,最后时刻松开再得一分,期间松开的话得不到松开键的分数求最大可得分数最主要的是处理长音的松开的那一分。对于短音标记为1 长音 开始
2015-11-08 21:18:29 795
原创 【搜索+状压DP】 HDU 3681 Prison Break
点击打开链接题意:开始能量包能提供走K步的能量,从F点出发要经过每一个Y点,通过G点时能充满能量包。且不能经过D点求最小的K。Y+G的个数最多有15个因为只有15个有用的点预处理出两两的距离,二分K值 状压搞一搞#include using namespace std;typedef long long LL;typedef pair PI;char s[12
2015-11-04 21:19:28 558
原创 【DP】 HDU 3689 Infinite monkey theorem 预处理
点击打开链接题意:一只猴子可以有n个键 可以敲m下求能敲出目标串的概率。思路:可以先求不能敲出目标串的概率用 dp[i][j] 表示 敲第 i 下时, 得到 目标串 j 结尾 的概率 例: 目标串 word wcwor 这是dp[ 5 ][ 3 ] 的状态。。如果目标串是 aaaaabaaaa 这样的 就会转移到奇怪的地方。。
2015-10-24 22:18:18 762
原创 【DP】 HDU 4427 Math Magic
点击打开链接题意:求K 个数的数列 ,和为N , LCM 为M 的个数因为M 的 除数很少 最多10 个 先处理出来就可以O(K*N*10*10) 处理了#include using namespace std;typedef long long LL;#define lson l, m, rt<<1#define rson m+1, r, rt<<1|1#pragm
2015-10-12 21:08:48 492
原创 【贪心】 ZOJ 3908 Number Game
点击打开链接题意:给出N 个数 每次可以取两个数 和不超过k ,价值为两个数的积,至多可以取m次,求价值最大用mulitset 储存 数,然后从最大的开始取 找到符合的最大的数,然后删去这两个数最后排序加一下//#include //using namespace std;//#define lson l, m, rt<<1//#define rson m+1, r
2015-10-11 20:44:36 913 2
原创 【搜索】 HDU 4770 Lights Against Dudely
点击打开链接题意:图中有最多有15个点 ,可以在点位置放置灯 (一个点只能放一个灯)灯可以照亮(i,j) (i-1,j) (i,j+1)其中(i-1,j),(i,j+1) 可以超出地图且不能为'#'其中一个灯任意可以转动求放置灯最少的数量。思路:状态压缩 枚举转动的点再判断是否可覆盖所有点#include #include #include #i
2015-10-08 22:38:05 492
原创 【DP】 FZU 2204 7 成环
点击打开链接dp[][][][] 存方法数第一维 存第一个放黑球还是白球第二维 存第i个球第三维 存第i个球是黑还是白第四维 存第i个球前连续几个球是相同颜色#include #include #include #include #include #include #include using namespace std;#include #includ
2015-10-07 22:26:31 573
原创 【基础数学】 HDU 4465 Candy Log搞
点击打开链接 题意:自己读 公式 ∑i=0n(p(n+1)∗(1−p)(n+1)∗C(n)(2n−1)∗i+(1−p)(n+1)∗p(n+1)∗C(n)(2n−1)∗i)\sum_{i=0}^n \left(p^\left(n+1\right)*(1-p)^\left(n+1\right)*C{^\left(n\right)_\left(2n-1\right)}*i+(1-p)^\left(
2015-10-03 21:47:48 572
原创 【搜索】 HDU 4474 Yet Another Multiple Problem
点击打开链接题意 : 求一个最小的n的倍数 ans,使得ans不包括 输入的几个数字 ,不存在输出 -1思路 :对于 两个数 A , B 存在 A > B 且 A%n = B%n 则 (A*10 + K ) %n = (B*10 + K ) %n 然而 A*10 + K 仍然 大于 B*10 + K所以就不需要搜 A 了 ,判断 余数 是否出现过 在剪枝ans
2015-10-03 20:27:01 469
原创 【LCA】HDU 5452Minimum Cut
点击打开链接题意:给出一棵树 再额外的几条边求最少删去多少条边(其中必须要一条树上的点)使得点被割开思路先枚举 删去树上的边 以及还需删去多少边 对于额外的边 u , v 他们的lca 为 fa 删去(fa -> u) 与 (v - > fa ) 之间的点都需要删去 u v 这条边 所以需要 +1 但是fa 以及 以上 就不需要加了 就 减去
2015-09-22 21:50:22 1038
原创 【递推】 HDU 5459 Jesus Is Here
点击打开链接题意 :求两两之间的下标差和设 numc [ i ] 为该段 c的数量addc [ i ] 为该段 所有c的 下标和 (从0 开始len [ i ] 为该段 长度ans[ i ] 为答案addc[i] 因为i-1段前面的c每个增加的len[i-2] 的长度 所以为 addc[ i-2 ] +addc[ i - 1 ] + len[ i-
2015-09-20 20:27:24 439
原创 【回文串】Codeforces 17E Palisection
点击打开链接题意:计算相交的回文子串对数先计算出总的数量 减去 不相交的回文子串的对数#include #include #include #include #include #include #include using namespace std;#include #include #include #include #include #inclu
2015-09-15 19:00:02 816
原创 【Splay】 HDU 1890 Robotic Sort 翻转
点击打开链接输入N个数输出N个数每次输出 P=值最小的位置 , 然后翻转 i-P 间的数翻转操作用lazy标记#include #include #include #include #include #include #include using namespace std;#include #include #include #include #in
2015-09-07 21:56:29 500
原创 【树链剖分】 HDU 4729 An Easy Problem for Elfness 二分
点击打开链接给出一棵树 每条边有容量新建一条边(初始值为1) 需要A$ 容量增加1 需要B$询问 预算有K 使得S->T的流量最大分三种情况1. AT路径上最小值+K/A;2. A > B时 新建一条边再扩容该条边 3. 扩容 S->T路径上的边 使得最小值最大1和2可以很快的算出对于第3种情况我们可以二分答案 求解#include #includ
2015-09-03 21:32:14 439
原创 【后缀数组】 POJ 2774 Long Long Message 两个字符串的最长公共子串长度
点击打开链接两串相接先判断sa[i]与sa[i-1]属于不同串 再取height[i] 的最值#include #include #include #include #include #include #include using namespace std;#include #include #include #include #include #inclu
2015-09-02 19:17:35 493
原创 【后缀数组】 POJ 3882 Stammering Aliens 可重叠出现k次字符串
点击打开链接题意:m表示至少出现m次的字符串,要求最长,并输出最后一次的子串的位置height [ i ] 表示 sa [ i ] 与 sa [ i -1 ] 的公共长度二分最长串的长度如果找到连续的k-1个 height 大于等于 长度len 即存在长度为len的串这时候记录下最靠右边的串的位置(需要特判 m==1 的时候#include #include #in
2015-09-01 21:19:35 808
原创 【Splay】 HDU 1754 I Hate It
点击打开链接区间最值模板 需要在两端设置两个结点( 查询 [ l, r ] 时需 将 l-1 转到根结点,r+1转到l-1的儿子结点 这时 r+1的左儿子就是答案 #include #include #include #include #include #include #include using namespace std;#include #include
2015-08-31 20:37:50 634
原创 【SPLAY】 [HNOI2002] 营业额统计 模板
点击打开链接模板#include #include #include #include #include #include #include using namespace std;#include #include #include #include #include #include #pragma comment(linker, "/STACK:10240
2015-08-31 16:13:00 527
原创 【SBT】 POJ 3481 Double Queue
点击打开链接1 表示插入 点2表示求最大值的点标 并删除3表示求最小值的点标 并删除0表示结束模板题。增加了一个val 表示为输出的值#include #include #include #include #include #include #include using namespace std;#include #include #include
2015-08-31 13:51:57 534
原创 【矩阵快速幂】 HDU 5411 CRB and Puzzle 等比
点击打开链接题意显然是 求 A+A^2+A^3+....+A^m这就是经典题目 矩阵乘法十种经典题目 递归解决后半部分提取 A^(m/2)该题再特判下 m==1的时候#include using namespace std;typedef long long LL;const int mod=2015;struct mat{ int s[55][55];
2015-08-21 10:53:18 573
原创 【瞎搞】 HDU 5416 CRB and Tree
点击打开链接查询才10个 X^Y=S && X^S=Y X^Y^X=YDFS处理出每个点到 节点1 的异或值 并统计每个异或值的数量对于查询的值 S 枚举每个点的到根节点的异或值 可以知道另一个需要的异或值 先前处理了异或值的个数还要注意S=0的时候#include #include #include #include #include #incl
2015-08-20 19:30:24 522
原创 【树链剖分】 POJ 2763 Housewife Wind 边权
点击打开链接题意:操作0 X :求 当前位置到X 的长度操作1 X Y :将第X条边长度更改为Y#include #include #include #include #include #include #include using namespace std;#include #include #include #include #include #pr
2015-08-19 09:40:08 579
原创 【树状数组】 HDU 5372 Segment Game
点击打开链接题意:两种操作 :a,ba=0:插入一个区间 长度为num 区间范围为[b,b+num] ( num表示为 这条区间的编号 第一个插入的 num=1,第二个插入的 num = 2a=1:删除第b个区间插入一个线段 要输出 在这个区间内的区间数量维护线段左右两端的位置数量 ( 输出 大于等于左端点的数量 减去 大于右端点的数量)所有的区间分成6种 容斥
2015-08-11 21:48:50 473
原创 【数据结构】 CF 547B Mike and Feet
点击打开链接长度为n的一个数列定义 一个区间内的 最小的值为 这个区间的strength 求长度为 1-n 的区间 最大的strength先求出每个位置左边/右边 的比它小的值的位置这样在 L+1 R-1 区间内这个位置是最小值然而 区间[len]的值是小于等于区间[len-1] 即可以推出#includeusing namespace std;typ
2015-08-07 21:12:12 906
原创 【瞎搞】 HDU 5358 First One
点击打开链接根据| log2 a +1 | =k 枚举k得到 区间 [2^(k-1), 2^k-1] ; k =[0,34]再枚举左端 i: 对于一个i 找到一个区间 [l, r]满足[ 2^(k-1), 2^k-1]然后就加起来#include #include #include #include #include #include #include us
2015-08-06 21:51:26 496
原创 【分块】UVA 12003 Array Transformer 水题
点击打开链接比较水的分快,还不会爆LL#include #include #include #include #include #include #include using namespace std;#include #include #include #include #include #include typedef long long LL;co
2015-08-04 09:36:03 559
原创 【划分树】 HDU 3473 Minimum Sum 中位数
点击打开链接题意:在给出有N个数的数列然后Q个询问询问 [ L,R ] 要那个公式的值最小显然是这个区间的中位数嘛然后就要处理出小于中位数的数的和大于中位数的数的和对于划分树来说每一层的区间上的数build后,其相对位置都不会变化滴所以在build 的时候统计下分到左边的数的前缀和查询的时候统计小于中位数的数的和{注释那一块}#inclu
2015-08-03 14:49:22 620
原创 【主席树】 HDU 4417 Super Mario 区间内小于某值的个数
点击打开链接查询时对于高度H二分hash值得到k值,查询1-k区间内的个数#include #include #include #include #include #include #include #include using namespace std;#include #include #include #include #include#incl
2015-07-29 19:25:56 1343
原创 【主席树】 ZOJ 2112 Dynamic Rankings 区间第k小值
点击打开链接题解:Empress#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #include #include #include using namespace std;#include #include #in
2015-07-29 16:18:44 544
原创 【线段树】 HDU 5316 Magician
点击打开链接题意:求一个区间内的最大的子序列的和:要求必须下标奇偶奇偶。。不能出现奇奇 偶偶这样维护好开始为奇结束为偶开始为奇结束为奇开始为偶结束为偶开始为偶结束为奇#include #include #include #include #include #include #include #include using namespace std;#i
2015-07-28 23:09:13 592
原创 【搜索】 HDU 5323 Solve this interesting problem
点击打开链接用线段树方式建树 [ 0, n]已知[ l, r] 结点 求n若 建一个[0, 2*r] 的线段树 这是的总点数的奇的,(左子树!=右子树[0, r] 在左子树里 则n最大为2*r若 建一个[0, 2*r+1] 的线段树 (左子树==右子树[0, r] 在左子树里 这时则 [0, r] 就可以建树所以搜的时候超出2*r 就直接return #inc
2015-07-28 23:01:07 701
原创 【染色】 HDU 5313 Bipartite Graph
点击打开链接给出一个二分图,求添加最多的边数 变成一个完全二分图若两个点集个数越接近,边的数量越大染色联通块得到k组两个点集的数量然后用bitset搞= =#include #include #include #include #include #include #include #include using namespace std;#include #
2015-07-26 19:21:35 599
原创 【瞎搞】 HDU 5312 Sequence
点击打开链接给出一个m 求最少由几个 3*n*(n-1)+1的数组成3*n*(n-1)+1 == 6*(n*(n-1)/2)+1定理: 至多三个三角形数( n*(n-1)/2 ) 可以构成任意自然数 对于一个数m 假设由k个题目所述的数组成即6*t1*(t1-1)/2+1 +6*t2*(t2-1)/2+1 +......6*tk*(tk-1)/2+
2015-07-26 18:48:41 466
原创 【网络流+最短路】 HDU 5294 Tricks Device
点击打开链接最短路求出到每个点的最小值以及边数枚举下能到达终点的点的边数num[i] 取个最小值 +1 然后减去m就是第二个输出的数对于原来的图满足最短路的边建上一条边跑网络流 就得到最小割= =因为有重边所以网络流的边的容量为该边最小权值的数量#include #include #include #include #include #include us
2015-07-21 19:09:03 583
原创 【线段树】 HDU 5289 Assignment
点击打开链接对于第i个数,最多有 i个以i为R端的区间可以选前面维护好一个L值 表示在L之前都不满足条件的位置然后对于L-R二分#include #include #include #include #include #include using namespace std;#include typedef long long LL;using namesp
2015-07-21 19:03:56 636
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人