zoukankan      html  css  js  c++  java
  • Luogu P1080国王游戏(贪心)

    国王游戏

    题目链接:国王游戏
    ps:题目数据说明了要写高精度.
    这个题的答案是(a.l * a.r < b.l * b.r)按照这个进行排序
    题解中大部分只是如何证明排序是:
    (a.l * a.r < b.l * b.r)
    我来利用上面的贪心性质来推一下.
    设国王左手的数为L,右手的数没什么用.....

    还是对于两个人来说.
    答案为:
    第一个人排在第一位,第二个人排在第二位.
    第二个人排在第一位,第二个人排在第一位.
    两种情况下的结果大的那个是不会被选择的排在第一位的.
    也就是
    如果$$max(L * r_1,L * l_1 / r_2) < max(L / r_2,L * l_2 / r_1)$$的话,那么直接让我们假设的第一个人在前面
    反之,直接让我们假设的第二个人在前面
    这样排序是正确的.(可以交上去试一下,qwq)
    之后
    我们可以化简这个式子.
    拆开后.考虑每一项作为答案.
    第一项
    (L * r_1)
    (L * l_1 / r_2)
    第二项
    (L / r_2)
    (L * l_2 / r_1)
    大家会发现,(L * r_1)完全不可能作为答案,因为第二项(L * l_2 / r_1)中的他一定会比这个大.同理,(L * r_2)也不会被选择.
    那么只剩下(L * l_1 / r_2)(L*l_2/r_1)相比
    两边同时乘以(r_2*r_1)除以(L)
    成了这种形式
    (l_1*r_1)
    (l_2*r_2)
    如果(l_1*r_1)大的话就是二(编号大的)在前面
    如果(l_2*r_2)大的话就是一(编号小的)在前面
    所以排序顺序是(l_1*r_1 < l_2*r_2)

  • 相关阅读:
    字符串时间+8个小时
    Django的field字段与参数介绍
    celery+Django
    二分查找
    排序算法
    socket套接字
    网络七层协议简述
    ORM操作mysql数据库多表的增删改查
    ORM操作mysql数据库
    Django框架静态文件配置和URL解析
  • 原文地址:https://www.cnblogs.com/tpgzy/p/9524703.html
Copyright © 2011-2022 走看看