摘要:网络流的模板题首先第一问我们直接用dinic搞就行了,费用直接存为0(时间上界非常松,这道题是能过),然后第二问我们只需要在第一问的残余网络上加一个源点,源点指向1号点,容量为k,费用为0,然后对于之前的每一条边,建一个相同的边容量为无穷大,费用为原来的费用。//By BLADEVILvar pre, other, len, w :array[0..20100] of longint; last :array[0..2100] of longint; l ...
阅读全文
摘要:网上说的是什么基尔霍夫矩阵,没学过这个,打个表找下规律,发现w[i]=3*w[i-1]-w[i-2]+2;然后写个高精直接递推就行了//By BLADEVILvar n :longint; a, b, c :array[0..100000] of longint; w :array[0..200] of ansistring; i :longint; function plus(s1,s2:ansistring):an...
阅读全文
摘要:这题需要了解一种数列: Purfer Sequence我们知道,一棵树可以用括号序列来表示,但是,一棵顶点标号(1~n)的树,还可以用一个叫做Purfer Sequence 的数列表示一个含有 n 个节点的Purfer Sequence 有 n-2 个数,Purfer Sequence 中的每个数是 1~n 中的一个数一个定理:一个Purfer Sequence 和一棵树一一对应先看看怎么由一个树得到Purfer Sequence由一棵树得到它的Purfer Sequence 总共需要 n-2 步,每一步都在当前的树中寻找具有最小标号的叶子节点(度为 1),将与其相连的点的标号设为Purfer
阅读全文
摘要:原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1601最小生成树的比较水的题,我们只需要加一个源点,连向所有的点,边权为每个点建水库的代价/************************************************************** Problem: 1601 User: BLADEVIL Language: Pascal Result: Accepted Time:216 ms Memory:3744 kb******************************...
阅读全文
摘要:原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1001整理了下之前A的题平面图可以转化成对偶图,然后(NlogN)的可以求出图的最小割(最大流)算法合集有具体的讲解,有兴趣的可以在网上搜下或者向我要(QQ30056882)/************************************************************** Problem: 1001 User: BLADEVIL Language: Pascal Result: Accepted Time:4124 ms M...
阅读全文
摘要:原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1192继续刷水题,二进制思想//By BLADEVILvar x :longint;begin read(x); writeln(trunc(ln(x)/ln(2))+1);end.
阅读全文
摘要:原题传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1012今儿一天状态不好,都没怎么刷题。。快下课了,刷道水题。。。。裸的线段树/************************************************************** Problem: 1012 User: BLADEVIL Language: Pascal Result: Accepted Time:1688 ms Memory:12920 kb**********************************...
阅读全文
摘要:原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1044首先对于第一问,我们可以轻易的用二分答案来搞定,对于每一个二分到的mid值我们从len[i]开始累加,每到累加值>mid的时候,就累加一个需要砍的次数,然后比较次数和m的大小关系,然后二分就行了,这里有个小贪心,对于一个len[i],我们尽量的不让他消耗一次砍得次数,直到非砍不可了才砍。那么问题就转化成了我们有N个木条的长度,用最多M刀将他们分为不超过ans长度的方案数我们用w[j,i]代表砍j刀,前i个木条的方案数,那么可以轻易的得到转移方程w[j,i]:=sigma(w[
阅读全文
摘要:开始看这道题的时候没什么思路,后来忍不住看了题解,发现自己真是水啊。。。自从学OI来第一次看到用约等的题首先我们设w[i]为第i个星球的答案,g[i]为第i个星球受到1-g[i]个星球的引力那么我们想办法递推,用w[i]推出w[ii],我们设ii=i+t那么。。。。那么我还是用手写然后照张照片吧/************************************************************** Problem: 1011 User: BLADEVIL Language: Pascal Result: Accepted Time:2428 ...
阅读全文
摘要:原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1041我们只需要求第一象限内(不包括坐标轴)的点数然后ans=ans*4+4就好了首先我们知道圆上点的方程关系x*x+y*y=r*r那么我们变下型Y*Y=R*R-X*X Y*Y=(R-X)*(R+X) ①我们令d=gcd(r-x,r+x)设A=(r-x)/d;B=(r+x)/d;因为我们要求x为整数,那么需要A,B为整数将A,B带回①可得A*B*d*d=y*y因为我们要求y为整数,那么需要A*B*d*d为完全平方数因为点在第一象限内,所以AB,所以A,B应为完全平方数那么...
阅读全文
摘要:2013-11-20 08:11原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1026首先我们用w[i,j]表示最高位是第i位,且是j的windy数个数那么我们可以写出转移w[i,j]:=w[i-1,k] abs(k-j)>=2首先对于询问的a,b区间,我们可以转化成求1-a的个数,1-b的个数,然后差就行了那么我们要求的就是1-x之间的windy数假设x一共有len位,那么我们求len-1位以下的windy数可以直接用w算出来,直接累加w[i,j]就行了那么我们对于len位的数,只需要改变枚举的上界就好了,相当于固定第i位,求
阅读全文
摘要:2013-11-19 16:21原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=2243树链剖分,用线段树记录该区间的颜色段数,左右端点颜色数,然后就OK了 1 //By BLADEVIL 2 type 3 rec =record 4 sum, left, right, succ, pred :longint; 5 lazy :longint; 6 end...
阅读全文
摘要:2013-11-17 10:38原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1008比较水的题,直接矩阵乘法+递推就OK了w[i,0]代表i个人不越狱的方案,w[i,1]代表i个人越狱的方案,那么有w[i,1]:=w[i-1,0]+w[i-1,1]*m;w[i,0]:=w[i-1,0]*(m-1);然后用矩阵乘法加速。然后我们可以发现,w[i,0]就是(m-1)^(i-2)*m那么n个人,一共有n^m种方案,减去w[n,0]就好了那么式子就是ans=m^n-m*(m-1)^(n-2)//By BLADEVILconst d39...
阅读全文
摘要:2013-11-17 08:52原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1040N个骑士,每个人有一个仇人,那么,每个骑士只有一个后继,将他和他憎恨的人连边,就组成了一颗内向树,内向树可以看成环儿上挂一堆树,那么我们对于每个环儿上的点,求出以该点为根节点的子树,取不取该根节点的价值(树P就好了,类似于没有上司的舞会),然后我们得到了一个环儿知道每个点取不取的价值,求最大价值,那么我们可以破环为链,固定第一个取不取,然后DP,如果第一个取,那么答案就是c[tot,0],不取的话答案就是max(c[tot,1],c[tot,0]),
阅读全文
摘要:2013-11-16 17:43原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1053因为使pi(prime[i])n then exit; if (ans>ansnum) or (ans=ansnum) and (sumn) then exit; dfs(d,p+1,sum*prime[d],ans+ans div (p+1)); dfs(d+1,1,sum*prime[d+1],ans*2);end; begin read(n); if n=1 then begin ...
阅读全文
摘要:2013-11-16 11:39原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1051强连通分量,缩完点之后看出度为0的强连通分量有几个,如果只有一个则输出该强连通分量的点数,否则输出0;/************************************************************** Problem: 1051 User: BLADEVIL Language: Pascal Result: Accepted Time:124 ms Memory:1396 kb*****...
阅读全文
摘要:2013-11-15 21:55原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1257要求求sigma k mod i(i0 do begin now:=k div j; l:=1; r:=j; while l<=r do begin mid:=(l+r) div 2; if k div mid=now then begin pi:=mid; r:=...
阅读全文
摘要:2013-11-15 21:51原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1037拿到这道题想到了DP,后来发现三维无法确定的表示状态(起码我是表示不出来)然后就用四维表示状态,w[i,j,k1,k2]表示一共i个人,j个男生,前i-1个人中任意一个人到第i个人的区间里,男生比女生最多多k1个人且存在k1的情况,女生比男生最多多k2个人且存在k2的情况那么w[i,j,k1,k2]这个状态可以更新w[i+1,j+1,k1+1,max(k2-1,0)]表示第i+1个位置放的男生,w[i+1,j,max(k1-1),k2+1]表示放的女
阅读全文
摘要:2013-10-11 16:45Rational Resistancetime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputMad scientist Mike is building a time machine in his spare time. To finish the work, he needs a resistor with a certain resistance value.However, all Mike has is lo
阅读全文
摘要:2013-09-23 21:16二分答案+匈牙利判断对于每一个时间,我们重新建一张二分图,由于每个塔可能打多次,所以要拆点,对于每个拆的点的可行飞行距离为(mid-t1)-(ll-1)*(t1+t2)*v,其中mid为二分的答案ll为将当前的点拆成第几个点(因为拆的点的时间是不一样的),然后依次判断该点和入侵者的距离是否小于,是则加边。建完图之后判断是否存在完美匹配,存在则向下二分,否则向上二分。//吐槽下,靠靠,t1的单位是秒,t2的单位是分钟。。。代码只是过了数据,好多地方都可以优化。比较弱,二分没有标程写的好,标程可以直接得到最后答案。//By BLADEVILvar n, m, t2.
阅读全文
摘要:2013-09-22 11:23//By BLADEVIL var n, m :longint; mark :array[0..100100] of longint; pre, other :array[0..1000100] of longint; last :array[0..100100] of longint; l,l2 :longint; que :array[0..100100]...
阅读全文
摘要:2013-09-21 16:50裸//By BLADEVIL var n :longint; i :longint; x, y :longint; t, tot :longint; key, s, left, right :array[0..100010] of longint; ft :longint; a, b ...
阅读全文
摘要:2013-09-18 08:23打表找规律w[i]:=w[i-1]; 奇w[i]:=w[i-1]+w[i div 2];偶//By BLADEVILvar w :array[0..1000010] of longint; i :longint; n :longint;begin assign(input,'sumset.in'); reset(input); assign(output,'sumset.out'); rewrite(output); r...
阅读全文
摘要:2013-09-18 08:13//By BLADEVIL var n, m :longint; pre, other :array[0..50010] of longint; last :array[0..10010] of longint; flag :array[0..50010] of boolean; tot :longint; ans :array[0..10010] of l...
阅读全文
摘要:2013-09-18 08:12由题可知,ans=∑i ∑j(x[i]-x[j])最后整理完之后应该是不同系数的X[i]相加,所以这道题就成了求不同x[i]的系数对于X[i],它需要减前面(i-1)个不同的数,所以系数先是(i-1),而计算它前面的每个数时都需要被X[i]减,所以系数成了2*(i-1),而且X[i]会被后面(n-i)个数减,且计算后面的x时,都会减x[i],所以需要减2*(n-i)所以系数就变成了2*(2*i-n-1),累加每个即可//By BLADEVILvar n :longint; i, j ...
阅读全文
摘要:2013-09-17 14:20题目描述在寂寞的夜里,星象仪是非常浪漫的东西。但是,你作为一个精神稍微有点不太正常的Geek,把原本正常的星象仪改造得像电报发送器一样。当然,你这个的构造还要更加奇葩一点。具体来说,你的星象仪是一棵满二叉树,二叉树的节点都是有两个输入端和一个输出端的AND门或者OR门。它们输入和输出的信号都是只是0 或者1 。它们会接受子节点的输出信号,然后将这两个信号进行AND运算或者OR运算作为自己的输出。然后,根节点的输出信号就是整个星象仪的输出信号。叶节点的输入信号是由你来调整的,如果二叉树有K 层,那么你显然有2^K个输入信号可以调整。调整一次当然只能改变一个输入信号
阅读全文
摘要:2013-09-15 20:04题目描述有这样一个游戏,桌面上摆了N枚硬币,分别标号1-N,每枚硬币有一个分数C[i]与一个后继硬币T[i]。作为游戏参与者的你,可以购买一个名为mlj的小机器人,从任一个硬币处开始游戏,然后跳往该硬币的后继硬币T[i],直到你要它停下来,经过每个硬币时,你可以选择是否捡起它。当某个mlj机器人停下来后将被扔掉,这时你可以选择结束游戏或再买一个mlj机器人继续游戏。注意,每个硬币只能捡一次,而且你不能要求mlj跳向一个已被捡起的硬币或从一个已被捡起的硬币处开始游戏,因为那样会把mlj摔坏的。YourTask一开始你的得分是0,每购买一个mlj机器人将扣掉你M分,
阅读全文
摘要:2013-09-11 10:22【题目大意】给定N个点的高度和M条相连的路线(单向),从最高点向下走,到无法走时为一条路径,求不同的路径数,(一节点不同就叫不同)【输入样例】4 5 (N,M)500 400 300 200 (高度)1 2 (边)2 33 41 42 4【输出样例】3//By BLADEVILvar n, m :longint; pre, other :array[0..5100] of longint; last :array[0..300]...
阅读全文
摘要:2013-09-11 09:56W[I]代表前I天能取得的最小花费,假设在第J天更改一次路线,那么如果有W[I]>W[J]+第j+1到第I天的最小花费+更改路线的花费(K) 那么更新W[I];用最短路求第J+1到I的最短路*(I-J),边界则是W[1]=0;因为最开始的路线不用更改(就是最初的路线不算在更改的费用中),这个方程默认第一次的路线就是更改后的,多加了一次K,所以最后输出W[I]-K;//By BLADEVILvar connect :array[0..110,0..110] of longint; n, m, k, e, ch ...
阅读全文
摘要:2013-09-08 10:12LRJ的算法竞赛入门经典训练指南里有类似的题,原题要难很多,p189页读入A,B两组中的所有数后,建立N个有序表:A1+B1xx.num[i] do inc(i); if ilow then qs(xx,low,j);end; procedure init;var i :longint;begin read(n); for i:=1 to n do read(x.num[i]); for i:=1 to n do read(y.num[i]); qs(x,1,n); qs(y,...
阅读全文
摘要:2013-09-08 10:00var m, n :longint; t :longint; f, last :array[0..20100] of longint; pre, other :array[0..160100] of longint; l, time :longint; dfn, low :array[0..20100] of longint; tot :...
阅读全文
摘要:2013-09-08 09:56记录数组w[I],代表第I个答案的值用三个指针指向W数组,代表当前的W[A2]*2,W[A3]*3,W[A5]*5更新答案每次取最小值,然后后移对应指针(可能一次移两个指针),可保证W数组的数不重复且递增vara2, a3, a5 :longint; w :array[0..1600] of int64; i :longint;function min(a,b:int64):int64;begin if a>b then min:=...
阅读全文
摘要:2013-09-08 09:48最大生成树,输出生成树中最短的边儿即可或者对边儿排序,二份答案+BFS判断是否1连通N时间复杂度都是O(NlogN)的附最大生成树pascal代码//By BLADEVILvar m, n, t :longint; pre, other, len :array[0..101000] of longint; father :array[0..100100] of longint; i :longint; procedure init;var i ...
阅读全文