摘要: 题目大意: 有一段长为n的线段,在这条线段上进行操作: 1.找出最靠前的长度为l的空线段,并把一个长为l的线段插入在这个地方. 2.删除从某点开始长为l的一段线段(有可能并不存在,总之就是把这个区间清空). 输出每次插入操作的位置.题目分析 线段树的经典题,练习块状链表写的好长啊,伤心ing 用块状链表的话,对于每一个块需要维护以下信息,包含左端点的最长空白,包含右端点的最长空白,这一块内的最长空白及其开始位置,最后是该块是否被完全赋值的标记。 对于查找操作,我们从头向后查找,维护包含当前块的最长空白长度,注意处理答案存在于块的头部的信息,而且当一个块内有答案时,他不一定是最长空... 阅读全文
posted @ 2012-10-31 15:23 Codinginging 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 【题目大意】开始时有两个变量(A=x^a,B=x^b),每次可以做以下爱几种运算:A*B,A*A,B*B,A/B,B/A,A/A,B/B并把结果放到某个变量中,问最少多少步可以得到目标X^P【题目分析】我们可以只记录当前两个变量的指数,这样各种操作就变成了加和减,可以直接进行BFS,但是显然会超时,于是我们先从状态入手,规定a<=b,这样就把状态数减少了一半,而操作中的除法也就只剩下b/a这一种情况了,再继续考虑优化。对于各种操作,其实A*A这个变化时与一些操作重复的,所以可以去掉这个变换,这样就减少了搜索树结点的度,使能达到的节点数更少了。状态树上已经不能再优化了,继续考虑较少扩展量, 阅读全文
posted @ 2012-10-10 19:35 Codinginging 阅读(1592) 评论(0) 推荐(1) 编辑
摘要: 题目都那么奇葩。。。第一题,实在搞不懂那个质数和互质怎么用,数论弱爆了。。。搞了一个矩阵如下1 10 a快速幂求出他的n次幂,最后乘 c x0 0 0这样答案矩阵中右上角的数模g就是答案。这样就能搞掉85分了吧。。。。。。第二题,数据范围不是很大,但是不会看到问题抽象为求满足sigema(k[i]*(vv[i]-v[i])^2*s[i])<=maxe时sigema(s[i]/vv[i])的最小值 个人看法。。。。。。所以n=1时就是反解不等式,直接输出。。。n=2时,需要考虑分配给每一段路的能量,答案是一个单峰凹函数,可以用三分法搞定。。。。应该能得到40分。。。。。。。。。第三题 数据 阅读全文
posted @ 2012-07-30 13:57 Codinginging 阅读(452) 评论(0) 推荐(0) 编辑
摘要: 这是做的最得意的一道题,当时在考场上得了90,是因为数据中A有100++的情况,Runtime_error了。。首先强调,本人不是用二分图,或者说不用图论算法,只涉及简单的枚举和记忆化思想。A国的人最多只能取两个,这个大家都能看出来,当然还可能不取。B国的人不去向常规考虑奇偶分组,这个会在后面提到。题意抽象为求一个最大完全图,那么当我们确定一个极大完全图后,任意一个元素都可以作为代表元,给定代表元之后,通过一边O(n)的扫描就能得到这个极大完全图。所以对于不含A国人的情况,我们只需要枚举一个B国人,把其他的B国人尽量多的加进去,这个加人的顺序与结果无关,而代表元可以使任意一个,因此可以用一个数 阅读全文
posted @ 2012-05-10 11:21 Codinginging 阅读(971) 评论(0) 推荐(0) 编辑
摘要: 一道答题解法一定细节解法并不怎么确定的题目,总体上就是搜索了。在每层当前可被感染的人中,只能选一个人,就先DFS建树,统计每一层的人,保存在一个表里,再进行搜索,一个人被控制后,就用递归把他的儿子全部赋值成不能染病,并在可染病人数中减去该子树大小,取最小值即可。统计官方上都说要剪枝,但是我的程序最大点0.2S。View Code 1 program noip2003t4(input,output); 2 type 3 node=^link; 4 link=record 5 goal:longint; 6 next:node; ... 阅读全文
posted @ 2012-05-10 10:43 Codinginging 阅读(678) 评论(0) 推荐(0) 编辑