- 博客(147)
- 收藏
- 关注
转载 【转】生命中的最后一天
前些日子惊闻dsh的噩耗,是在网友的BLOG上看到的。当时我就笑了,怎么可能呢,愚人节还没过完么。不过仔细想想貌似有个把月没联系了, CALL之,但电话那头已经关机了。这时我就笑不出来了。后来从他同学那里得到消息,确实是几个月前查出肝癌晚期,几天前走了。还是不敢相信,精力如此旺盛的人,居然说走就走了。天妒奇才,尚未扬名立万而先逝,甚至连一篇讣告都没有。 dsh生长于单
2013-12-16 12:58:17 1470 2
原创 2014浙江省赛总结
第二次到紫金港。比较感动的事情是,由于下雨,开幕式陈词被剪短了。。这次1金5银1铜,大概是本校目前最好的一次省赛了吧。。but隔壁学校hdu5金x银x铜,一比起来我们还是弱翻了。。这次的A~L共12道题,AGL这种水题略过,B是个胆子够大就能AC的暴力DP,C是个YY,D大概是推公式然后高精度但是死活推不出来- -,EF一个拓扑排序一个最短路,J找循环节,I题是Trie图上找两个相
2014-04-13 14:25:35 2392 20
原创 Codeforces398D Instant Messanger
题目链接是的真相就是耍流氓暴力!!!离线处理处理出每个点的点度deg[i](无重边)维护一个数组from_small[i],表示与i相邻的点中点度比deg[i]小的点的在线数量然后对于每个询问,暴力数出i的相邻点中点度比deg[i]大的点在线的数量,然后加上from_small[i],就是答案复杂度是O(操作数*sqrt(点度之和))证明:每次询问的复杂度为
2014-03-18 23:40:43 1500
原创 TLE君的强连通日记
TLE君的强连通日记HDU1269 迷宫城堡判断是不是强连通图。数据超级水,事实上随便写个dfs就能过了HDU2767 Proving Equivalences添加最少数量的有向边把原图变成强连通图这道题靠dfs果然已经水不过去了,于是只好老老实实学了一下tarjan (其实tarjan的精髓就是如何用栈?)先tarjan把强连通分量缩点,得到有向无环图
2014-03-18 21:05:05 2619
原创 ZOJ3494 BCD Code (AC自动机+数位DP)
用AC自动机构造出病毒串的trie图,然后设状态dp[i][j]表示长度为i且位于j节点时的符合要求的数的数量,然后按照普通数位DP做即可递推式数位DP统计[1,x]内符合条件的数只需要考虑三种情况:1,位数比x短的数2,位数和x一样,但是某一位比x小的数3,x本身是否符合条件0比较特殊,在一般的数位DP中需要特殊处理,一般以特判为主AC自动机的话,即trie树+fail树
2014-03-08 19:46:59 1188
原创 二分图König定理的网络流思路证明
本篇尝试从网络流构图上证明König定理,个人理解,仅作参考,不喜勿喷König定理:二分图的最小点覆盖等于原图最大匹配首先,你得知道网络流,然后,你得知道最大流等于最小割,然后我们就可以开始了用网络流解决二分图最大匹配的思路:二分图最大匹配可以解释为,从原图中选择尽量多的相邻顶点对,每个顶点最多只能被选择一次因此在网络流中的建图就是这样:源向左侧点连容量为1的边,
2014-03-04 19:44:03 2081 4
原创 HDU1754 I Hate It (线段树java版)
会写java了咩哈哈哈哈import java.util.Scanner;public class Main { static int t[] = new int[201000<<2]; static int a[] = new int[201000]; static int n,m; static int max(int a,int b) { return a>b ?
2014-03-03 11:57:43 1256 6
原创 ZOJ Monthly, March 2014
A:小型模拟,队友写的B:转化到十进制后暴力sqrt(n)判素数,可行的原因是,后面都不是素数。。队友写的D:二分图最大权独立集对于x^y为奇数的点i和点j,xi^yi^xj^yj为偶数,而p也为偶数,所以gcd至少为2,所以奇数点之间互不冲突对于x^y为偶数的点同理因此将互相冲突的点之间连边,可以得到一个二分图,做最大权独立集 == 总权和-最小割 E:将
2014-03-02 21:30:51 1810 4
原创 Codeforces Round #232 (Div. 1) ABCD
题目链接代码稍后补上个人感觉本场题目的排列真是坑爹啊。。CD明显应该和AB换个位置- -bA:将所有数分解质因数并统计每个质因数的个数,对于质数pi,有ci个,设f(ci)表示把这ci个相等的数放到n个箱子里的方法种数(C(ci+n-1,n-1)),那么答案就是f(c1)*f(c2)*....f(cn)B:对于相邻的两个质数pi和pi+1,他们之间的数字个数为pi+1 -
2014-02-27 18:06:45 1565
原创 HDU 3313 Key Vertex (bfs)
求从s到t的关键点数量,所谓关键点即是st路径必经之点首先随便找一条st路径(方便起见就st最短路吧),那么关键点肯定不会出现在这条路径之外。然后从s开始bfs,若搜到该路径上的点,不将新点加入队列,并且维护一下s点最远能bfs到的路径上的点是谁那么这个最远点就是割点,并且从s扩展出来的其他点都不是割点然后把这个最远点当做s点,重复上述过程,直到搜到t点为止over弱表示不
2014-02-23 22:26:12 1056
原创 CF280D k-Maximum Subsequence Sum (线段树)
10W个数10W个操作,操作有两种:修改单点的值;从区间[L,R]中选出最多k段不相交区间,使和最大。k最大为20用dp思路时间复杂度O(mk^2lgn) == TLE。so,会有其他方法。如果用费用流解决k段区间最大和,那么找增广路的过程是怎么样的呢。step 1,找到一条费用最大的增广路Lstep 2,若找不到增广路,或L已经是负费用了,goto step 4,否则
2014-02-09 22:29:09 1620
原创 脑子一抽
寒假的生活真是令人感动啊早上都不见了loop: 喝酒,头晕,醒,喝酒,头晕,醒...好懒散啊,随便找篇论文就能荒废一天实质上都没有认真看...智商被压制得厉害又陷入了不想起床和不想变瘦的惶恐之中睁开双眼真是一件困难的事情 总觉得马上就要瞎了人之将死...大学僧不是就应该老老实实的混日子嘛我是在干嘛到了一定年龄的人类,又会变成小孩子...但是,妈,
2014-02-07 00:20:24 1132 5
原创 Codeforces Round #200 (Div. 1)
题目链接代码链接A:串联一个电阻:(a+b)/b并联一个电阻:a/(a+b)那么a>=b时连续串联a/b个,a那么只要修改一下欧几里得就可以了gcd(a,b): return b==0 ? 0 : a/b+gcd(b,a%b)B:目标状态是'++...++',能发现偶数个'+'或者偶数个'-'连在一起时,是可以随便转化的('++++' -> '----
2014-02-04 16:53:56 1386
原创 POJ 2763 Housewife Wind (LCA+树状数组)
10W节点的树,10W次操作:1,:询问两点距离;2:修改一条边权。解法:如果没有修改,那么dis(a,b) = dep(a) + dep(b) - dep(lca(a,b)) * 2,可以用rmqLCA来O(1)做到。但是有修改的话,基本就可以无脑考虑log级别的算法像树状数组线段树什么的了。记一个dfs时间戳:进入节点记一次,退出节点记一次,那么可以得到边的两个时间序in[
2014-01-28 20:35:25 1671
原创 网络流学习笔记
HDU 1532 Drainage Ditches 网络流模板题HDU 3549 Flow Problem网络流模板题HDU 3572 Task Schedule任务分配可行性问题。观察知:1:m台机器是不区分的。2:对于每个时刻,至多允许m个任务运行。3:每个任务的[bg,ed]区间,只要被运行p次,该任务就完成了。so:对时间建点,
2014-01-22 15:22:07 1883
原创 POJ 3728 The merchant (Tarjan LCA)
题意:给出一棵树,有点权,5W次询问从a走到b交易一件物品能获得的最大利润(即在某个节点买入一件物品,在后面的节点卖出)。正确理解题意花了一天多,泪奔。解法:设a,b的LCA为c,则答案来自a->c,c->b,或者在ac段买入在cb段卖出。容易想到信息是可以合并的,那么不妨在Tarjan用并查集求出一个询问的LCA后,顺便用并查集把路径的信息合并。TarjanLCA求lca(a,b
2014-01-18 20:45:10 965 2
原创 Codeforces Round #223 (Div. 1) ABCD
题目链接代码链接A:操作2的L范围在1~10W之间,也就是说当序列长度达到10W之后,接下来的操作就只需要存标记就好。B:对于操作2,将他之前的操作1都枚举一遍,如果与当前询问的子树有交,则将该x[i]加入set中。关于如何判断有交,操作2的level小于操作1的level并且对应到最底层的两个区间有交集即可。时间复杂度O(n^2lgn)。C:记cnt为区间[L
2014-01-13 21:39:16 1420
原创 HYSBZ 1503 郁闷的出纳员 (Treap)
提交了50次后发现BZOJ不能用cin,cout的事情,我就是个大傻逼Treap实现插入,删除,第k大,事实证明太久没敲是会手生的。#include #include #include using namespace std;struct Node { int v,sz,r; Node *ch[2];};Node *nill,*root;
2014-01-11 00:56:11 1197
原创 插头DP学习小记
CDQ的插头入门论文代码链接HDU 1693 Eat the Trees多条回路,状态表示中只要用01区分有没有插头即可。ZOJ 3466 The Hive II六边形的多条回路,按列推看起来好写,把轮廓线画出来就很清晰了。URAL 1519 Formula 1一条回路的入门题,用括号表示法来讨论插头的合并确实要简单一些,括号表示相较最小表示更适合状
2014-01-11 00:50:39 1898 2
原创 Codeforces Good Bye 2013
题目链接A:B:C:D:设串s的‘AC’数量为cnt,则容易发现 s[i].cnt = s[i-2].cnt + s[i-1].cnt + (s[i-2]以‘A’结尾 && s[i-1]以‘C’开头),因此只需要枚举s[1]和s[2]的cnt数量,是否以'C'开头,是否以‘A’结尾,然后递推计算s[k],判断s[k].cnt是否等于x即可。比赛的时候很逗的抽象成了斐波那
2014-01-02 10:59:29 1236
原创 Codeforces Round #222 (Div. 1) ABD
题目链接A:显然的思路是从网格中最角落的格子开始一个一个的改成'X',那么怎么判断格子在角落呢?就是从任意空格子bfs一遍后队列最后面的k个格子。B:二分天数day判断可行性。关于如何判断:从大于最大ai的student里面选一个有最小c值的student,用他解决当前最大的day个bug,然后a数组的最大值变小,则可选的student变多,以此循环。若某个时刻bug还有剩,但是当
2013-12-31 01:22:45 1429
原创 Codeforces Round #221 (Div. 1) ABCD
题目链接代码链接A:其实很容易猜到,1 6 8 9这四个数字的排列A能够满足 (i*10000 + A)%7 == 0,那么好了,按照其他数字任意排列后对7取余的结果来安排这4个数字的顺序,最后把所有的0输出即可。B:O(n^2)求出f(i,j) : 位置i,j向右有多少个连续的1。因为可以对行重新排列,因此对于每一列j,将f[j]的n个数排序,按从大到小来构造矩形,取最大
2013-12-28 00:23:29 2002
原创 Codeforces Round #220 (Div. 2) ABCD
题目链接代码链接A:从点s能走到点t必须满足他们的x坐标之差是a的倍数,y坐标之差是b的倍数,并且这两个倍数之差是偶数(如果是奇数一定无法到达t点),然后还要判断是否s点在x维或y维是否有活动范围,如果一步都无法跨出显然也是不行的。枚举4个角落作为t点取最小值即可。B:这道我写的dp。设状态f[N][2]表示到第i个数为止,第i个数还能否用于后面的合并,的最大合并数量以
2013-12-21 00:39:58 1816 4
原创 URAL 1519 Formula 1 (插头)
问用一条回路覆盖网格里的所有空格子有几种方法虽然是论文的大裸入门题,但是AC跳出来还是好激动 =.=#include #include #include #include #include using namespace std;typedef __int64 lld;const int N = 1001003;int n,m,tot,code[15];vector s;
2013-12-19 16:36:37 1288 2
原创 Codeforces Round #219 (Div. 1) ABCD
A:排序,二分装在袋子里的袋鼠数量,然后用可看见的最大的袋鼠装袋子里最大的袋鼠判断可行性。#include #include #include using namespace std;const int N = 501000;int n,a[N];bool check(int p) { for (int i = p-1; i >= 0; i --) {
2013-12-14 14:06:49 1405
原创 2013亚洲区域赛长春站总结
RP自上车起的那一刻就在不停的跌宕起伏。先是某人的旅行包上溅到了不明物体满途的异味,再是两个队友由于飞机停运不能参加热身赛,然后是一场行李箱‘丢失’的虚惊,最后是赛后返程发现遗失了各种发票。。权当是为比赛攒RP了。热身赛: 由于队友的缺席,我成功的达成了单挑一场比赛的心愿(虽然只是热身)。。开场的时候,先拍好来VIM的配置文件,然后问志愿者要root的密码(本菜只会sudo的修改方式 -.
2013-12-13 10:13:36 1197 4
原创 UVA12538 Version Controlled IDE (可持久化Treap)
维护一个文本,支持:p位置插入串,p位置删除长度c的串,查询历史版本某个位置开始的串#include #include #include using namespace std;typedef long long lld;const int N = 50100;char s[1010100];int on;struct Node { Node *ch[2]; char c; i
2013-12-01 19:57:35 1224 2
原创 Codeforces Round #208 (Div. 2) ABCD
题目链接代码链接A:1000个点组成999条线段,直接暴力判是否有线段相交B:按题目描述构造出没有随机字母的a串,检查a是否为b的子序列。再判一下a,b串的组成合法性C:差不多就是模拟题。对于当前需要处理的两个0之间的区间,找出前三大数的位置,然后把第一个大数放到queue头,把第二个大数放到deque头,第三个大数放到stack顶,其他的元素看着随便放就好了。如果
2013-11-25 18:39:41 894
原创 Codeforces Round #214 (Div. 2)
题目链接代码链接A:枚举4个门的守卫,看一下钱够不够贿赂,够的话就把多余的前全给第二个人B:统计一下Sum[i%k],取最小的那个i,则答案为i%kC:方程转化为 sigma(ai-k*bi) = 0,以ai-k*bi为容量,ai为价值,背包一遍D:虽然l,r的范围很大,但是边最多3000条,则可行区间的左右端点的取值必然在这3000*2个值内。因此,枚举3
2013-11-25 09:52:30 1253
原创 2013 长沙Regional I题:LIKE vs CANDLE (树dp)
下面用0表示LIKE,1表示CANDLE。设状态fw[u]表示以节点u为根的子树的 0-1 的最大值,用rv[u]表示以节点u为根的子树的 1-0 的最大值。则:fw[u] = max(rv[u]-cost,sigma(fw[v]))rv[u] = max(fw[u]-cost,sigma(rv[v]))v 为u的子节点。而每个节点只考虑翻或者不翻,因此花费分别为X或Y。cos
2013-11-24 22:12:53 1570
原创 Codeforces Round #148 (Div. 1) ABC
A:记S[i] 表示位置从0~i的数的异或值,则 i~j 的异或值等于 S[i-1]^S[j]。要找出满足任意区间异或值都不为0的序列,则转化成满足任意S[i-1] != S[j]的序列。因此答案为 A(n,2^m-1)。B:要使最大值与最小值差值最小,则是使最大值尽量小,最小值尽量大。将数组从小到大排序,则当前最大值为 a[n]+a[n-1],最小值为 a[1]+a[2]。显然任何改
2013-11-22 22:09:00 893
原创 POJ 3076 Sudoku (DLX)
16*16 的数独,DLX的最爱/* Created Time: Thursday, November 21, 2013 PM08:36:56 CST */#include #include #include #include using namespace std;const int N = 20;const int MAXN = 4*256+7, MAXNODE = 4*25
2013-11-22 13:04:15 993
原创 Codeforces Round #213 (Div. 1) ABCD
题目链接代码链接A:考虑对于矩形(x,y,z,t):sum = sigma( sigma( si * sj ) ) xB:容易知道能获得的最大价值,把不可能拿到的物品都去掉,不会求的去面壁。。首先知道对于任意的交换,一定要使手上的价值增大,否则交换是浪费时间。由于每次交换的都是一个集合,是不是可以考虑这样的贪心:我将所有的物品相互组合变成背包,然后通过交换背包来使当前的
2013-11-20 20:06:12 1365
原创 Codeforces Round #211 (Div. 2) ABCD
题目链接代码链接A:模拟简单算盘B:找最大连续k数和的下标C:贪心。从左往右考虑,考虑连续相同段,若大于等于3个连续,则必须删到剩2个,若出现...AABB这种,则删掉后面的B,变成...AAB。D:因为小伙伴买车时若不够钱就会从budget补,因此若存在一种买x辆车的方法,即是说通过合理的安排能够使budget>=0,换句话说,若存在一种尽量花小伙伴钱的方
2013-11-19 16:18:23 1141
原创 Codeforces Round #204 (Div. 1)
题目链接代码链接A:贪心。考虑一般情况(即每个数都有小数)题目要求的值即是所有的小数部分之和-n,但是由于有整数的存在,整数可以向上取整,也可以向下取整,因此若有x个整数,则有x个可选择的'1',借此来调整answer使其绝对值最小。B:显然跟逆序对有关,每次交换要么逆序对加1,要么减1。设 dp[i] 为逆序对数为i时的期望,则 dp[i] = dp[i-2]*0.5
2013-11-18 19:18:54 1124
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人