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;
        }
    }
    
  • 相关阅读:
    mysql数据类型介绍
    IO中同步、异步与阻塞、非阻塞的区别(转)
    法线
    C++配置坑-----openCv环境配置
    C++学习记录
    FBX SDK环境配置
    Unity调起外部程序cmd.exe等
    unity读写Excel表格
    Unity编辑器扩展
    Unity 读写文本 文件
  • 原文地址:https://www.cnblogs.com/mollnn/p/14135399.html
Copyright © 2011-2022 走看看