zoukankan      html  css  js  c++  java
  • [Awson原创]洪水(flood) 奇技淫巧法

    Description

    Awson是某国际学校信竞组的一只菜鸡。今年,该市发生了千年难遇的洪水。被监禁在学校的Awson不甘怠堕,想将自己投入到公益服务事业中去。这天,他偷了H老师的小电驴,偷偷地溜出校。

    他观察了一下整个城市的概况,发现学校校门所在地的坐标为(X,Y)。城市共有不超过100条街道,知道每条街道的起止点坐标,街道是笔直双向的,每个方向一个车道。并且确保街道是相互连通的。他每第一次走过一侧车道,满目疮夷,生灵涂炭,百感交集:或触景生情,感慨大自然的残酷,悠悠长叹;或豪情壮志,抒发自己满腔热血,气势豪迈。导致他车速只有20km/h。若这条路的这侧他不是第一次走,车速将提高到50km/h。他可以在任意交叉口、或任何街道的末尾任意转向,包括转U型弯,并且不会耗时。他想知道游历所有街道,并且回到学校最短耗时,精确到分钟。

    Input

    输入数据多行。

    第1行两个整数X,Y

    接下来每行四个整数代表街道起止点坐标,单位米,不超过100行,文件末尾以’EOF’结束。

    Output

    共1行,两个整数,代表时间,中间用’:’(半角字符,不含引号)隔开。

    Sample Input

    0 0

    0 0 10000 10000

    5000 -10000 5000 10000

    5000 10000 10000 10000

    Sample Output

    3:55

    Hint

    样例解释:

    共3小时55分钟走完全程。

    数据规模:

    所有坐标可能为负,但保证均为整数,且在长整形(C++中的int)范围内。图无环。


    这个题,说实话,我认为出地很吊。

    我一开始,以为这题有多么复杂,然后就放弃想正解了,准备套分:直接记录所有路的长度,最后算时间。

    结果拿过去一测,全是错的,我也就没想了。

    结果,下午一出正解,mmp,就是我的套分算法。可惜我没写对,要不然就可以多拿100分。

    接下来,讲讲为什么我的套分算法就是正解。

    我们来观察一题目,发现其实每条路可以分成两条路,然后每条路走一遍就正好可以遍历所有的路并且回到原点。

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #define ll long long
    #define il inline
    #define db double
    using namespace std;
    il int gi()
    {
        int x=0,y=1;
        char ch=getchar();
        while(ch<'0'||ch>'9')
        {
            if(ch=='-')
            y=-1;
            ch=getchar();
        }
        while(ch>='0'&&ch<='9')
        {
            x=x*10+ch-'0';
            ch=getchar();
        }
        return x*y;
    }
    il ll gl()
    {
        ll x=0,y=1;
        char ch=getchar();
        while(ch<'0'||ch>'9')
        {
            if(ch=='-')
            y=-1;
            ch=getchar();
        }
        while(ch>='0'&&ch<='9')
        {
            x=x*10+ch-'0';
            ch=getchar();
        }
        return x*y;
    }
    db ans;
    int main()
    {
        freopen("flood.in","r",stdin);
        freopen("flood.out","w",stdout);
        int x,y,num=1;
        cin>>x>>y;
        db a,b,c,d;
        while(cin>>a>>b>>c>>d)
        {
            ans+=sqrt((a-c)*(a-c)+(b-d)*(b-d))/10000;
            num++;
        }
        ans*=60;
        int lol=(ans+0.5)/60;
        int v=(int)(ans+0.5)%60;
        if(v>9)
        printf("%d:%d
    ",lol,v);
        else
        printf("%d:0%d
    ",lol,v);
        return 0;
    }

     

    PEACE
  • 相关阅读:
    MY_0003:设置界面显示单位
    H5_0024:对于事先无法确定css大小的情况,可以通过JS动态修改
    H5_0023:html页面禁止放大缩小页面
    MY_0002:导出单位设置
    MY_0001:添加命令到自定义工具栏
    H5_0020:判断安卓苹果平台
    Web_0003:关于PHP上传文件大小的限制
    H5_0019:JS中定义json结构
    H5_0018:z-index失效的原因
    H5_0017:通过元素自定义属性值获取元素对象,并获取属性值
  • 原文地址:https://www.cnblogs.com/gshdyjz/p/7365805.html
Copyright © 2011-2022 走看看