摘要:
一个序列长度为n的序列P(1,n),构造一个序列Q,长度为N并且由1~N组成。一开始Qn对在P1的位置,接下来每秒Q都会整体右移一个位置,直到2N秒后和P没有交集。Ai代表第i秒P和Q交集元素的个数,Bi代表位置重合并且元素相等的元素个数。令Ci=max(Ai-Bi),构造一个序列,使Ci最小。 Ci最小是N-sqrt(N),官方题解说的比较详细。构造序列这个地方看了半天才看明白他是怎么构造的,对于S序列,可以这么理解:给出一个序列x[1,n],以及S(a1,a2,a3....),对应的操作就是先把x[1~a1]翻转,再把[a1+1,a1+a2+1]翻转....,比如x[]=(1,2,3... 阅读全文
posted @ 2012-09-25 15:05
Burn_E
阅读(331)
评论(1)
推荐(0)
摘要:
经典页面调度问题,理想算法就是移出从现在开始最久未使用的。 线段树中存正在使用的页面(题中是模版。。)下次出现的时间,每次选出现时间最晚的扔掉。如果遇到一个已经在内存中的页面,也要跟新该页面在线段树中的值。 1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 #define lson l,m,p<<1 5 #define rson m+1,r,p<<1|1 6 #define calm l+r>>1 7 #define MAXN 10000 阅读全文
posted @ 2012-09-25 14:21
Burn_E
阅读(226)
评论(0)
推荐(0)
摘要:
求至少经过K条边,到达终点的最短路(K<=50)。 K比较小,先用Bellman求出走50步到达每个点的最短路,然后把50步的可达点加到队列里SPFA即可。 题解是直接二维最短路的,不过好像比bellman+spfa慢。。目前排在HDOJ第一。。 1 #include <string.h> 2 #include <stdio.h> 3 #include <queue> 4 #define MAXN 5005 5 #define MAXE 200005 6 #define INF 0x3f3f3f3f 7 struct edge{ 8 int u,v,n 阅读全文
posted @ 2012-09-25 14:13
Burn_E
阅读(227)
评论(0)
推荐(0)
摘要:
用若干个-1到2的数组成一个最接近D的数(-1<D<2)。过程中不能超过2。 吐槽一下题目,看了半天才看明白。。。。排个序然后背包。。 1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 #define MAXN 205 5 int cas,n,tot,x[MAXN],d[240005]; 6 double x1; 7 int main(){ 8 //freopen("test.in","r",stdin); 9 scanf 阅读全文
posted @ 2012-09-25 14:04
Burn_E
阅读(216)
评论(0)
推荐(0)
浙公网安备 33010602011771号