摘要: http://www.spoj.com/problems/GSS1/题意:无更新询问区间最大连续和。做法:线段树每个节点维护sum[rt],maxsum[rt],lsum[rt],rsum[rt],分别区间和、区间最大和、区间左端最大和和区间右端最大和。 查询时按从左到右扫,维护ans为最大连续和,rans为到该段的右端最大连续和,扫到每一段时有: ans = max(ans,maxsum[rt]); ans = max(ans,rans+lsum[rt]); rans = max(rsum[rt],rans+sum[rt]); 1 /* 2 *Author: ... 阅读全文
posted @ 2013-09-06 21:39 發_ 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个数列,每次查询一个区间不同数的个数。做法:离线+BIT维护。将查询按右端点排序。从左到右扫,如果该数之前出现过,则将之前出现过的位置相应删除;当前位置则添加1。这样做就保证每次扫描到的某一位置,以该位置为右端点的区间都相应地确定了。 1 /* 2 *Author: Zhaofa Fang 3 *Created time: 2013-08-25-22.29 星期日 4 */ 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 1... 阅读全文
posted @ 2013-08-26 00:13 發_ 阅读(555) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3680巧妙的构图。题目:给定N个区间(ai,bi)权值wi,求最大权和且每个点最多覆盖K次。构图:将区间端点离散化,将第i个点连第i+1个点花费为0,容量为INF,即addedge(i,i+1,0,INF)(可用来跳过一些区间); 再处理N个区间(ai,bi),addedge(ai,bi,-wi,1); 最后源点连第一个点,addedge(src,1,0,k);最后一个点连汇点,addedge(n,sink,0,k)。原理:构完图之后做最小费用最大流,其实就是找不大于K条增广路。如果两个区间有交集,则不能一次流过,要分成两条增广路流... 阅读全文
posted @ 2013-07-19 15:55 發_ 阅读(825) 评论(0) 推荐(0) 编辑
摘要: 题目描述:迈克在一个养猪场工作,养猪场里有M 个猪圈,每个猪圈都上了锁。由于迈克没有钥匙,所以他不能打开任何一个猪圈。要买猪的顾客一个接一个来到养猪场,每个顾客有一些猪圈的钥匙,而且他们要买一定数量的猪。某一天,所有要到养猪场买猪的顾客,他们的信息是要提前让迈克知道的。这些信息包括:顾客所拥有的钥匙(详细到有几个猪圈的钥匙、有哪几个猪圈的钥匙)、要购买的数量。这样对迈克很有好处,他可以安排销售计划以便卖出的猪的数目最大。更详细的销售过程:当每个顾客到来时,他将那些他拥有钥匙的猪圈全部打开;迈克从这些猪圈中挑出一些猪卖给他们;如果迈克愿意,迈克可以重新分配这些被打开的猪圈中的猪;当顾客离开时,猪 阅读全文
posted @ 2013-07-17 16:26 發_ 阅读(363) 评论(0) 推荐(0) 编辑
摘要: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1271题目:普通的网络流模型加多了一个每个节点的流量限制。刚开始的时候是直接找增广路,顺便更新节点的容量,但是证明不了其正确性,WA了,大概这种做法是错的。正解:将每个点拆成两个点,并且这两个点构成的边的容量是该点容量,这样就保证流过的流量不大于该点容量。 1 /* 2 *Author: Zhaofa Fang 3 *Created time: 2013-07-16-20.00 4 阅读全文
posted @ 2013-07-16 20:49 發_ 阅读(674) 评论(0) 推荐(0) 编辑
摘要: 早早地水完了三道题,pt1000用的是dfs,开始做的时候误认为复杂度最多就O(2^25),结果被一组O(2*3^16)的数据接近1e8给cha了。继续努力。pt250:求两个串的前缀组成的不同串数目。set搞定。 1 /* 2 *Author: Zhaofa Fang 3 *C... 阅读全文
posted @ 2013-07-11 12:42 發_ 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 题意:求重复但不重叠的子串数。解题思路:height分组。枚举长度L,将height数组进行分组,使得每一组的height都大于L,若有一组的最大的sa值和最小的sa值之差大于L,则说明该组内存在一个符合条件的子串。View Code 1 /* 2 *Author: Zhaofa Fang 3 *Created time: 2013-05-06-19.28 4 *Language: C++ 5 */ 6 #include <cstdio> 7 #include <cstdlib> 8 #include <sstream> 9 #include <... 阅读全文
posted @ 2013-05-06 20:22 發_ 阅读(166) 评论(0) 推荐(0) 编辑
摘要: http://codeforces.com/contest/300/problem/C题意:一个n位的数只包含a,b两个数字并且每一位数字的和也只包含这两个数字,求这样的数有多少?做法:枚举a出现的次数为x,则b为n-x。如果sum = ax+b(n-x)合法,则这种情况的数目为C(n,x).C(n,x) = n! / ( (n-x)! * x! ) (mod p) = n! * inv((n-x)! * x!) {inv(a)为a的乘法逆元}。求乘法逆元的方法(a存在mod p的乘法逆元当且仅当a与m互质): =>法一:扩展欧几里德定理=> => 法二:欧拉定理(结合快速幂 阅读全文
posted @ 2013-04-27 20:45 發_ 阅读(631) 评论(0) 推荐(0) 编辑
摘要: hdu 2610题意:从数组中找出不超过P个序列,每个序列为不下降序列,输出按1)序列长度;2)每个数出现的先后做法:bfs,题目要求完全符合bfs的性质。判重很关键,我用了比较水的set来判重。(用set<string>来判重wa,改用set<vector<int> >ac而且比前者快。)343MS 1 /* 2 *Author: Zhaofa Fang 3 *Created time: 2013-04-22-11.50 4 *Language: C++ 5 */ 6 #include <cstdio> 7 #include <cstdl 阅读全文
posted @ 2013-04-22 21:57 發_ 阅读(223) 评论(0) 推荐(0) 编辑
摘要: http://www.codeforces.com/contest/298/problem/D题意:Alice有n条鱼和Bob有m条鱼,鱼有k个品种,重量按标号不下降的递增,问A的总重量能否大于B的总重量。做法:如果A中的每一条鱼在B中都能找到一条鱼大于等于其重量,则A的总重量不可能大于B。View Code 1 /* 2 *Author: Zhaofa Fang 3 *Created time: 2013-04-22-11.50 4 *Language: C++ 5 */ 6 #include <cstdio> 7 #include <cstdlib> 8 #i... 阅读全文
posted @ 2013-04-22 12:42 發_ 阅读(244) 评论(0) 推荐(0) 编辑