摘要: 这题总算是弄好了,大致思路还是简单,我不贴思路了,贴另一个收获,如下,看下面两段代码:#include <stdio.h>#include <stdlib.h>int map[300][300];int count[300];int time[300];int ans, tot;int n, p;void maketree(int k){ int i; int j, l; for(i = 0; i < count[k]; i++){ j = map[k][i]; for(l = 0; l < count[j]; l++){ if(map[j][l] == k 阅读全文
posted @ 2011-07-25 21:02 zqynux 阅读(992) 评论(0) 推荐(0) 编辑
摘要: 转自:http://www.cppblog.com/Yuan/archive/2011/02/23/140553.aspx如果目标也已知的话,用双向BFS能很大提高速度单向时,是b^len的扩展。双向的话,2*b^(len/2) 快了很多,特别是分支因子b较大时至于实现上,网上有些做法是用两个队列,交替节点搜索×,如下面的伪代码:while(!empty()){扩展正向一个节点遇到反向已经扩展的return扩展反向一个节点遇到正向已经扩展的return}但这种做法是有问题的,如下面的图:求S-T的最短路,交替节点搜索(一次正向节点,一次反向节点)时Step 1 : S –> 1 阅读全文
posted @ 2011-07-25 13:14 zqynux 阅读(899) 评论(0) 推荐(0) 编辑
摘要: 本题就是数学题,比较繁琐的是误差和特殊情况。假设一个球i,它掉落到车顶的时间为t1,掉落到地上的时间为t2,则如果掉落到车顶时车的后排已经经过该点,或掉落到地上时车的前排还没有到达该点,则该点不会被接受。于是有:i<=s+l-vt1,i>=s-vt2综合考虑1e-5的误差,我们得出i的区间:[s-vt2-e,s+l-vt1+e]∩[0,n-1],而接受的球数就是该区间内的整数个数。 代码如下(其实我觉得这个代码有不好的地方,但是能AC。。数据不强大。。):#include <math.h>#include <stdio.h>#include <stdl 阅读全文
posted @ 2011-07-25 10:31 zqynux 阅读(804) 评论(0) 推荐(1) 编辑