「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.01\leq x, y\leq 0.01 1000ms 128MB 30
subtask2 109x,y109-10^9\leq x,y\leq 10^9 1000ms 128MB 70

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

题解

  • 本题可以当做思维题,同班大佬一下子就想到了输出第一个点,而蒟蒻的我只能一点点的证明,在老师的帮助下,终于有所收获。
  • 这道题是直接输出 \(A\) 点,但是为什么呢,下面给出证明。
\[\because OA + OB \geq AB\\
\because OA + OB \geq AB\\
\because OA + OC \geq AC\\
\therefore 3OA + 2OB + OC \geq 2AB + AC\\
\therefore 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;
}

原文链接: https://www.cnblogs.com/hellohhy/p/13343117.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    「LAOI-01」Game Over B

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/368919

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 下午6:41
下一篇 2023年3月2日 下午6:41

相关推荐