06 2015 档案
摘要:1 /************************************************************** 2 Problem: 2179 3 User: idy002 4 Language: C++ 5 Result: Accep...
阅读全文
摘要:1 /************************************************************** 2 Problem: 4128 3 User: idy002 4 Language: C++ 5 Result: Accep...
阅读全文
摘要:感谢asm.Definer清楚明了的题解:http://www.cnblogs.com/Asm-Definer/p/4470112.html收获: 1. 关于重心, 对于一个无向图, 我们这样给每条边重新确定方向: uv这条边将原图分成两个部分Su,Sv,w(S)表示S集合中点的权值和,那么 ...
阅读全文
摘要:题意:你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关。在这个奖励关里,系统将依次随 机抛出k次宝物,每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的宝物以后也不能再吃)。 宝物一共有n种,系统每次抛出这n种宝物的概率都相同且相互独立。也就是说,即使前k-1次系统都抛...
阅读全文
摘要:题意: 给一个简单无向图,一个人从1号节点开始随机游走(即以相同概率走向与它相邻的点),走到n便停止,问每条边期望走的步数.首先求出每个点期望走到的次数,每条边自然是从它的两个端点走来. 1 /****************************************************...
阅读全文
摘要:给两个集合A,B,找满足要求的(a,b)的对数,可以计算对于a,哪些b成立.还有就是字符串hash的使用,感觉平时用字符串hash太少了. 1 /************************************************************** 2 Proble...
阅读全文
摘要:自己只能想到O(n^2)的:dp[i][j] 表示 以i结尾,长度为j的o串的概率,然后在每次遇到x的时候算分数.正解是:dp[i]表示前i个的答案,d[i]表示以i结尾的期望长度.推的时候它用d[i]*d[i]-d[i-1]*d[i-1]来算新增的贡献,有点不明白为什么可以这样(平方的期望应该不等...
阅读全文
摘要:大致题意: 给一棵树,每个节点最开始都是黑色,有两种操作,1.询问树中相距最远的一对黑点的距离 2.反转一个节点的颜色一种做法: 建立出树的括号序列,类似这样: [A[B][C]],所以长度为3*n 假如我们要询问AC间的距离,提取出中间的括号:[]],匹配消去后得到],其长度就是距离. 现在...
阅读全文
摘要:题意: 给一个数集和一个数d,问满足下列要求的排列数(相同的数要区分): a[i]+d>=a[i+1] ( i in [1,n) )因为数的给出顺序不重要,所以先排序,假如我们已经解决了前i个数的答案,考虑前i+1个数,即我们可以将第i+1个数放在哪,然后发现对于前i个数的每一种方案,我们都可以选择...
阅读全文
摘要:详见vfleaking在discuss里的题解.收获: 当我们要顺序枚举一个序列,并且跳过某些元素,那么我们可以用并查集将要跳过的元素合并到一起,这样当一长串元素需要跳过时,可以O(1)跳过.暴力: 1 /***********************************************...
阅读全文
摘要:反转操作 + 翻转操作 = 对称操作因为上面三个操作都是自己的逆操作,所以我们只需要实现对称操作和反转操作,就可以搞定翻转操作. 1 #include 2 #include 3 #define N 100010 4 using namespace std; 5 6 struct N...
阅读全文
摘要:一个堆和一个并查集对应,并且满足并查集中所有没有死的人等于堆中的人 1 /************************************************************** 2 Problem: 1455 3 User: idy002 4 Langu...
阅读全文
摘要:对于每个节点,要在其子树中选尽量多的节点,并且节点的权值和小于一个定值.建立大根堆,每个节点从儿子节点合并,并弹出最大值直到和满足要求. 1 /************************************************************** 2 Problem: ...
阅读全文
摘要:1 /************************************************************** 2 Problem: 3285 3 User: idy002 4 Language: C++ 5 Result: Accep...
阅读全文
摘要:集合幂级数其实就是一种集合到数的映射,并且我们针对集合的一些操作(or xor and specil or )为这种映射定义运算.其中一些东西可以通过某些手段将其复杂度降低.orz vfk 1 /****************************************************...
阅读全文
摘要:题解RT.eps = 1e-10 WrongAnswereps = 1e-5 Accepted 1 /************************************************************** 2 Problem: 4004 3 User: idy0...
阅读全文
摘要:建立矩阵,跑快速幂 1 /************************************************************** 2 Problem: 4000 3 User: idy002 4 Language: C++ 5 Result: A...
阅读全文
摘要:看错题目了,想成每个城市都可以买一个东西,然后在后面的某个城市卖掉,问最大收益.这个可以类似维护上升序列的方法在O(nlog^3n)的时间复杂度内搞定这道题用到的一些方法: 1. 可以将有关的线段提取出来,然后一起处理. 2. 线段树可以维护两个方向的信息,这样就可以处理树上有序的东西. 1 ...
阅读全文
摘要:本质上是维护两个可持久化数组,用可持久化线段树维护. 1 /************************************************************** 2 Problem: 3673 3 User: idy002 4 Language: C+...
阅读全文
摘要:因为d>=0,所以一个位置的数只会单调不降并且只会有一次穿过0.用这个性质,我们我可在线段树中记录正数负数的个数和和,以及最大的负数以及答案.修改操作:如果当前最大负数+d 11 #include 12 #include 13 #define min(a,b) ((a)(b)?(a):(b)) ...
阅读全文
摘要:先对原串分组hash,查询就是看某一区间内是否出现某值.可以每个值存一个集合,保存这个值出现的位置.(也可以建可持久化值域线段树)map >很省事...(Yes写成了YES,狂WA) 1 #include 2 #include 3 #include 4 #define N 1000010 5 ...
阅读全文
摘要:枚举1的个数,统计有那么多1的数的个数 1 /************************************************************** 2 Problem: 3209 3 User: idy002 4 Language: C++ 5 ...
阅读全文
摘要:开方操作最多进行5次就可以把出现的任何数变成1.所以用线段树暴力修改,以后修改时只需看一下是否当前区间都是0或1,如果是那么就直接返回. 1 /************************************************************** 2 Problem: ...
阅读全文
摘要:看到这道题感觉像是网络流,如果没有权值,可以用DAG最小路径覆盖,有权值,感觉可以求一个上下界最小可行流,但内存卡了....时间估计也悬.正解要用到一些数学知识,这里梳理一下:定义: 偏序关系: 满足自反,反对称,传递的关系是自反关系 链: 偏序集A的一个子集B,并且满足B中元素两两可比 反链...
阅读全文
摘要:简化题意: 给定两个集合A,B,A集合有一个权值,并且对应一个B集合的子集,求A的一个子集,满足权值和最小且对应的子集的并集是B集合.感觉像网络流,但因为每个B中的元素对应一个A中的元素就行了,是or而不是and,所以割就无能为力了.于是去orz rzz.他的题解: 把中间的点按x坐标排序,f[i]...
阅读全文
摘要:算法步骤: 1. 先将原图像最大可行流那样变换,唯一不同的是不加dst->src那条边来将它变成无源无汇的网络流图.直接跑一边超级源到超级汇的最大流. 2. 加上刚才没有加上的那条边p 3. 再跑一遍超级源汇之间的最大流,p的流量就是我们要求的最小可行流流量(等于其反向边的"容量")收获: ...
阅读全文
摘要:收获:1. 上下界网络流求最大流步骤: 1) 建出无环无汇的网络,并看是否存在可行流 2) 如果存在,那么以原来的源汇跑一次最大流 3) 流量下界加上当前网络每条边的流量就是最大可行流了.2. 输出方案: 可以把边的位置信息一起存在边表中,求完最大流后遍历一下边,把信息更新过去. 1 #i...
阅读全文
摘要:1 #include 2 #include 3 #define min(a,b) ((a)n = n; 15 this->src = src; 16 this->dst = dst; 17 etot = 0; 18 mems...
阅读全文
摘要:弱爆了,典型的行列建模方式,居然想不到,题做少了,总结少了。。。。。。二分答案mids----------------------->i行----------------------->j列----------------------------->t [si-mid,si+mid] [L,R]...
阅读全文
摘要:1 /************************************************************** 2 Problem: 1337 3 User: idy002 4 Language: C++ 5 Result: Accepted 6...
阅读全文
摘要:最小圆覆盖问题:给定平面上的一个点集,求半径最小的一个圆,使得点集中的点都在其内部或上面。随机增量算法: 定义:点集A的最小圆覆盖是Circle(A) 定理:如果Circle(A)=C1,且a不被C1覆盖,那么a在Circle(AU{a})的边界上。 证明:换一种找最小圆覆盖的思路,我们初始化...
阅读全文