zoukankan      html  css  js  c++  java
  • [ICPC2020上海L] Sum of Log

    [ICPC2020上海L] Sum of Log - 结论

    Description

    给定一张网格图,从 ((0,0)) 走到 ((n,m)),每次可以沿着直线走,从一个格点到另一个格点,中间不能穿过其它格点,不能连续两次走同样的方向,求最短路程。

    Solution

    两个点之间最多经过一个中转点

    中转点一定在起点终点所连直线附近

    实际上连 GCD 都不用每次判断,因为 AC + BC 最小的地方一定满足互质条件(否则那个经过的整点的答案一定会更小)

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    double calc(double x, double y)
    {
        return sqrt(x * x + y * y);
    }
    
    signed main()
    {
        ios::sync_with_stdio(false);
    
        int T;
        cin >> T;
        while (T--)
        {
            int n, m;
            cin >> n >> m;
            double ans = n + m;
            if (__gcd(n, m) == 1)
            {
                ans = min(ans, calc(n, m));
            }
            else
            {
    
                for (int i = 1; i <= n; i++)
                {
                    int t = (i * m - 1) / n;
                    if (t >= 0 && t <= m)
                        ans = min(ans, calc(i, t) + calc(n - i, m - t));
                }
            }
            cout << setiosflags(ios::fixed)
                 << setprecision(10)
                 << ans << endl;
        }
    }
    
  • 相关阅读:
    css3发光闪烁的效果
    移动端滚动加载数据实现
    JS生成一个简单的验证码
    百度地图在IOS中不显示
    vue开发神奇vue-devtools的安装
    gulp搭建服务
    webstorm中配置ES6语法
    centos 7 中防火墙的关闭问题
    centos命令
    Cesium加载影像
  • 原文地址:https://www.cnblogs.com/mollnn/p/14135399.html
Copyright © 2011-2022 走看看