UVA - 12230 Crossing Rivers

来源:互联网 发布:云购源码 编辑:程序博客网 时间:2024/06/06 00:35

题目链接  http://acm.hust.edu.cn/vjudge/problem/39016

题目大意:有个人每天要去公司上班,
每次会经过n条河,家和公司的距离为len,
人在陆地的速度为1,给出N条河的信息,
包括起始位置,宽度,以及船的速度。船会往返在河的两岸,
人到达河岸是,船的位置是随机的(包括方向)。
问说人达到公司所需要的期望时间。

陆地上的时间是固定的,只需要分别计算过每条河的时间即可。
单纯算过河时间的话,最快的是l/v,最慢的可能是3l/v,
期间的时间是线性的,所以过河期望时间就是4l/2v=2l/v

相对于我的代码 网上写的太强了


网上的

#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>using namespace std;int n;double p, l, v, d;int main() {    int cas = 1;    while (scanf("%d%lf", &n, &d) != EOF && n+d) {        while (n--) {            scanf("%lf%lf%lf", &p, &l, &v);            d = d - l + l * 2 / v;        }        printf("Case %d: %.3lf\n\n", cas++, d);    }    return 0;}
我的....

</pre><pre name="code" class="html">#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#include <queue>#include <vector>#include <cmath>#include <stack>#include <map>#include <set>#define pi acos(-1)#define LL long long#define ULL unsigned long long#define INF 0x3f3f3f3fusing namespace std;typedef pair<int, int> P;const int maxn = 1e5 + 5;struct River{    int sta, to;    double t;}river[15];int cmp(River a, River b){    return a.sta < b.sta;}int main(void){//freopen("C:\\Users\\wave\\Desktop\\NULL.exe\\NULL\\in.txt","r", stdin);    int n, len, i, v, l, cur, cas = 1;    double ans;    while (cin >> n >> len && (n || len))    {        for (i = 1; i <= n; i++){            scanf("%d %d %d", &river[i].sta, &l, &v);            river[i].to = river[i].sta + l;            river[i].t = (2*l*1.0) / (1.0*v);        }        sort(river+1, river+1+n, cmp);        cur = 0;        ans = 0;        for (i = 1; i <= n; i++){            if (river[i].sta > cur)                ans += (river[i].sta - cur) * 1.0;            cur = river[i].to;            ans += river[i].t;        }        if (cur < len)            ans += (len - cur) * 1.0;        printf("Case %d: %.3f\n\n", cas++, ans);    }    return 0;}



0 0
原创粉丝点击