摘要:
无聊,临走时候刷个水题。有公式,不说了。sum = n * 1 / 1 + ( n - 1 ) * 2 * 1 / 2 + ( n - 2 ) *2*1/3+.......+(n-i+1)*2*1/i;AC:#include<stdio.h>int main(){double sum;int n;int i;while(scanf("%d",&n)!=EOF&&n!=0){sum=n;for(i=2;i<=n;i++)sum+=2.0*(n-i+1)/i;printf("%.2lf\n",sum);}return 阅读全文
摘要:
简单的dijkstra模板题。很简单,找一个起点到终点的最短路径。10几分钟就敲好代码了。一交,WA!无语看了disscus,被指点有重边。查,又是重边这个玩意儿。搞什么,读题真读不出来! 然后筛选了一下重边,就AC了。还有一点啊,就是起点等于终点时,要输出0,别输出inf了。其中,我加了一个剪枝条件,if(pos==e||min==inf) break;完全正确,而且时间从15ms 提高到了0 ms。(高兴)AC:#include<stdio.h>#define inf 100000000int map[210][210];int d[210];int s[210];int n, 阅读全文
摘要:
其实非常没有必要像刚刚那样,可能是没有真正理解dij吧。 事实上,对每个起点调用dij算法后,每个终点的最短路长度都已经出来了。对于每个起点,从这些终点的最短路中选出最最短路就可以了。 然后在比较每个终点,即求得最小值。照这个思想敲了个代码一交,781ms,才快了110ms。 不应该啊~然后比较了一下网上的代码,发现我没有剪枝。加上条件 if(min==inf) break; // 剩余的点距离都为无穷远时,结束再一交,78ms。好爽,终于ok了。AC:#include<stdio.h>#include<string.h>#define inf 100000000int 阅读全文
摘要:
这是一道多源点的dijkstra模板题,我整整做了一上午,交了14遍,过了4遍(呵呵,很疯狂啊!)总的来说,收获颇丰。应该算完全掌握了这种算法。这是第一次过的代码,用的超级笨的方法,对每个起点和终点分别调用dij算法。放在low[i][j] (代表第i个点到第j个点的最短距离)中,最后再从low[i][j]找出最短的路径输出。 890ms过的。呵呵,很强,几乎没有比我更慢的啦!嘿嘿(不好意思) ,代码也很长。AC:#include<stdio.h>#include<string.h>#define inf 100000000int map[1051][1051];int 阅读全文