- 博客(12)
- 收藏
- 关注
原创 hdu-4605 Magic Ball Game[离散化+回溯+树状数组]
题目大意很简单。 有一颗树(10^5结点),所有结点要么没有子结点,要么有两个子结点。 然后每个结点都有一个重量值,根结点是1 然后有一个球,从结点1开始往子孙结点走。 每碰到一个结点,有三种情况 如果此球重量等于该结点重量,球就停下了 如果此球重量小于该结点重量,则分别往左右儿子走的可能都是1/2 如果此球重量大于该结点重量,则走向左儿子的概率是1/8,右儿
2016-04-29 21:51:42 357
原创 nyoj-471 好多的树[容斥定理]
简单直接的,假如一个之间能约分说明被挡住了。 需要知道:1、2、。。。。n之间能被m整除的个数位n/m. #include #include #include #include using namespace std; #define MAX_SIZE 110000 #define ll_int long long int bool notPrime[MAX_SIZE]; in
2016-04-29 19:22:49 461
原创 poj-2104 K-th Number[主席树/函数式线段树/可持久化线段树]
膜拜大神:点击打开链接 点击打开链接 【题目描述】有n个数字排成一列,有m个询问,格式为:left right k .即问在区间[left,right]第k大的数据为多少? 纯属个人理解,有不正确的地方欢迎留言指正: 先来设想下如何解决这个问题。 把数字在数组中的位置i作为定义域,数字的值v[i]作为值域。 假如对于 [left,right]的数我们能知道它们的值域在不同区
2016-04-29 09:44:44 615
原创 hdu-1512 Monkey King [并查集+左偏树]
左偏树学习:点击打开链接 题意: 有N只猴子, 每只都有一个力量值. 开始的时候互不认识, 它们之间会发生M次斗争. 每次发生a, b的斗争时,a, b都会从各自的朋友圈里拉出一个最强的, 之后两只猴子打, 打完后这两只猴子的力量值各减半. 并且打完后,两只猴子的朋友圈的所有人都互相认识(也就是不会再打).你的任务就是对于每个斗争, 若a, b是朋友, 那么输出-1, 否则输出打完后它们的朋友
2016-04-28 11:00:46 621
原创 hdu-3943[数位dp(记忆化搜索)+二分]
求出区间 (P,Q] 中找到第K个满足条件的数,条件是该数包含X个4和Y个7 学习大神的模板后做的之前用递推式感觉要考虑的东西比较多,记忆化搜索就相对简化编程复杂度了 链接:模板 数位dp是取得每个数它v,0~v之间满足 有(x个4,y个7)条件的数的个数,那么可以知道随着v增大,满足(x个4,y个7)条件的数的个数是增大的。 有了这个单调性的条件就可以用二分来查找第k个数的位置。 #i
2016-04-26 19:05:35 364
原创 fzu-2113 Jason的特殊爱好[数位dp]
先进行预处理 s[pos][val] s[3][5]表示 0~500的1的个数 所以s[3][5]+=s[3][4](0~400); s[i][j]+=s[i][j-1]; s[3][5]+=s[2][9]+ss[1][9](0~99); for(int k=i-1;k>=1;--k) s[i][j]+=s[k][9]; 特殊的当 j==1时,s[i][j]+=1; 当j==2
2016-04-21 12:18:37 495
原创 hdu-4686 Jzzhu and Sequences 【矩阵快速幂】
其中a0 = A0 ai = ai-1*AX+AY b0 = B0 bi = bi-1*BX+BY 最后的结果mod 1,000,000,007 n ai*bI=Ax*Bx*ai-1*bi-1+Ax*By*ai-1+AyBxbi-1+AyBy 递推式可以构造由矩阵快速幂快速求取。 我理解的递推式构造矩阵的形式可以先这样想(说错了板砖轻拍): A*[每个递推式的递推项 ]=[每个递
2016-04-19 17:01:25 321
原创 hdu-4549 M斐波那契数列【矩阵快速幂】
找规律写出f(2),f(3),f(4),f(5) .........可以发先 a b的系数是一系列的fib数列 如果可以求出fib数列 求快速幂就可以了 这样问题就在于如何求fib数列了 1 1 【f[n-1],f[n-2]】 * 1 0 = 【f[n],f[n-1]】 当gcd(A,M)
2016-04-19 12:01:27 913
原创 hdu-3410 Passing the Message[单调队列]
求最左边的人,与最右边的人。最关键的地方就在于高个会把低个挡住。 所以维持一个单调递减的单调队列。每个元素都要入队列,出队列就有如下考虑 for(i ->n) (1)第i个元素比front大 ,说明队列中所有的人都会被挡住。清空队列 (2)第i个元素front小,那他可能挡住队列中的某些人,从rear->front,”弹出“比第i个人矮的,直到遇见比他高的人。 (3)队列为空
2016-04-14 18:10:03 443
原创 poj-1094 Sorting It All Out[拓扑排序]
感觉需要注意的细节有点多。 (1)先判断是否有环 用used表示能拓扑的点 vis表示能搜索到的点 假如两者总数不等说明有环。 (2)再判断拓扑序是否唯一 假如一次寻找0入度节点有多个即不唯一 /* 所谓不同值的递增排序的序列,是通过一个小于号的运算符, 找出从最小的到最大的元素。例如,有一个有序的序列A,B,C,D。 这就意味着,A<B,B<C,C<D。对于这一道问题, 我们将为
2016-04-08 18:54:15 345
原创 poj-3580 SuperMemo[splay tree]
学了splay 后 撸的第一道题。 是看了大神的教学,引用了大神的核心代码才会的:模板出处 刚开始没注意:使用一个节点你需要把他的标记先下压。提供了好多次wa。 /*题意:给一个数组,有6种操作: (1)add x y d : [x,y]中所有数加d ----x-1 ---------y+1 ---[x,y] 给y-1的左子树加上+d 标记 (2)reverse x y: [x,y
2016-04-07 20:41:33 394
原创 poj-2828 Buy Tickets【线段树】
很经典的一道线段树问题,以前都没想到到线段树可以这样用。 /*Description: 春节将要到来了。小H希望回家过年。然后大家都知道火车是非常的难买,经常要排很长的队,但是小H为了买火车票拼了,不怕排队。 但是小H到了火车站的时候天已经黑了,他感觉非常的冷。他想为什么不找个问题思考来遗忘寒冷呢。然后他就想到了自己排队这个问题。 他想如果排队的每个人都有个固定的颜值,并且自己排队的时候经常有人
2016-04-01 12:14:22 379
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人