zoukankan      html  css  js  c++  java
  • 「LAOI-01」Game Over B

    题目背景

    现在是2048年,小A正在VR虚拟机上刷题。

    题目描述

    小A刷到了一个题:
    给出一个三角形(ABC),你需要找到任意一个点(O),使得 (3OA + 2OB + OC) 最小。
    小A打了太多游戏,思维钝化不会做了,你能帮帮他吗?

    输入格式

    输入六个 五位小数 (x0,y0,x1,y1,x2,y2)​,分别表示点(A)的横纵坐标、点(B)的横纵坐标、点(C)的横纵坐标。保证这三个点构成一个三角形。

    输出格式

    输出一行两个 五位小数(四舍五入),表示点(O)的横纵坐标。

    输入输出样例

    输入

    0.00000 0.00000
    1.00000 0.00000
    0.00000 1.00000
    

    输出

    0.00000 0.00000
    

    说明/提示

    数据范围

    子任务编号 x,yx, y 时限 空限 分值
    subtask1 0.01x,y0.01-0.01leq x, yleq 0.01 1000ms 128MB 30
    subtask2 109x,y109-10^9leq x,yleq 10^9 1000ms 128MB 70

    数据保证最优的点O的坐标也在 (x,y) 的范围内。

    题解

    • 本题可以当做思维题,同班大佬一下子就想到了输出第一个点,而蒟蒻的我只能一点点的证明,在老师的帮助下,终于有所收获。
    • 这道题是直接输出 (A) 点,但是为什么呢,下面给出证明。

    [ecause OA + OB geq AB\ ecause OA + OB geq AB\ ecause OA + OC geq AC\ herefore 3OA + 2OB + OC geq 2AB + AC\ herefore OA+OC+2(OA+OB) geq 2AB + AC\ ]

    • 由此显然只有(O)(A)重合时取 (=)
    • 否则
      • (O)(AB)上,(OA + OB = AB) , (OA + OC > AC)
      • (O)不在(AB)上,(OA + OB > AB) , (OA + OC geq AC)
    • 所以code代码很好写啦。

    code

    #include <bits/stdc++.h>
    using namespace std;
    int main(){
        string a,b;
        cin>>a>>b;
        cout<<a<<" "<<b;
    }
    
  • 相关阅读:
    POJ 1328 Radar Installation
    POJ 1700 Crossing River
    POJ 1700 Crossing River
    poj 3253 Fence Repair (贪心,优先队列)
    poj 3253 Fence Repair (贪心,优先队列)
    poj 3069 Saruman's Army(贪心)
    poj 3069 Saruman's Army(贪心)
    Redis 笔记与总结2 String 类型和 Hash 类型
    数据分析方法有哪些_数据分析方法
    数据分析方法有哪些_数据分析方法
  • 原文地址:https://www.cnblogs.com/hellohhy/p/13343117.html
Copyright © 2011-2022 走看看