博客
关于我
Codeforces Round #456 (Div. 2) D. Fishes
阅读量:530 次
发布时间:2019-03-08

本文共 1387 字,大约阅读时间需要 4 分钟。

为了解决这个问题,我们需要找到一种方法来放置k条鱼,使得随机放置r×r的网时,平均捕捉到的鱼的数量尽可能高。通过分析,我们发现每条鱼被捕捉的概率取决于它所在位置的覆盖次数。我们需要找到覆盖次数最多的位置,并将鱼尽可能集中在这些位置,以最大化期望值。

方法思路

  • 计算总的位置数:首先计算整个n×m水池中可以放置r×r网的总位置数T。
  • 计算覆盖次数:对于每个位置(x, y),计算它被覆盖的次数。覆盖次数是该位置作为网的位置时,可以覆盖多少个其他位置。
  • 排序覆盖次数:将所有位置的覆盖次数从大到小排序。
  • 选择最大的k个覆盖次数:选择覆盖次数最大的k个位置,计算它们的覆盖次数总和。
  • 计算期望值:用总和除以总的位置数T,得到期望值。
  • 解决代码

    n, m, r, k = map(int, input().split())if r > n or r > m:    print("0.0000000000")    exit()T = (n - r + 1) * (m - r + 1)if T == 0:    print("0.0000000000")    exit()coverages = []for x in range(1, n + 1):    for y in range(1, m + 1):        # 计算x轴的覆盖次数        cx_low = max(1, x - r + 1)        cx_high = min(n - r + 1, x)        if cx_low > cx_high:            cx = 0        else:            cx = cx_high - cx_low + 1                # 计算y轴的覆盖次数        cy_low = max(1, y - r + 1)        cy_high = min(m - r + 1, y)        if cy_low > cy_high:            cy = 0        else:            cy = cy_high - cy_low + 1                coverage = cx * cy        if coverage == 0:            continue        coverages.append(coverage)# 按覆盖次数从大到小排序coverages.sort(reverse=True)# 取前k个最大的覆盖次数sum_c = sum(coverages[:k])# 计算期望值E = sum_c / Tprint("{0:.12f}".format(E))

    代码解释

  • 输入读取:读取输入的n, m, r, k值。
  • 总位置数计算:计算可以放置r×r网的总位置数T。
  • 覆盖次数计算:遍历每个位置,计算其x和y轴的覆盖次数,得到该位置的覆盖次数。
  • 排序覆盖次数:将所有位置的覆盖次数从大到小排序。
  • 选择最大的k个覆盖次数:取前k个最大的覆盖次数,计算它们的总和。
  • 计算期望值:用总和除以总的位置数T,得到期望值并输出结果。
  • 这种方法通过贪心算法,确保我们总是选择覆盖次数最大的位置,从而最大化期望值。

    转载地址:http://pgziz.baihongyu.com/

    你可能感兴趣的文章
    Orcale表被锁
    查看>>
    svn访问报错500
    查看>>
    sum(a.YYSR) over (partition by a.hy_dm) 不需要像group by那样需要分组函数。方便。
    查看>>
    ORCHARD 是什么?
    查看>>
    Struts2中使用Session的两种方法
    查看>>
    Stream API:filter、map和flatMap 的用法
    查看>>
    STM32工作笔记0032---编写跑马灯实验---寄存器版本
    查看>>
    Static--用法介绍
    查看>>
    ssm旅游信息管理系统的设计与实现bus56(程序+开题)
    查看>>
    order by rand()
    查看>>
    SSM(Spring+SpringMvc+Mybatis)整合开发笔记
    查看>>
    ViewHolder的改进写法
    查看>>
    Orderer节点启动报错解决方案:Not bootstrapping because of 3 existing channels
    查看>>
    org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement profile
    查看>>
    sql查询中 查询字段数据类型 int 与 String 出现问题
    查看>>
    org.apache.commons.beanutils.BasicDynaBean cannot be cast to ...
    查看>>
    org.apache.dubbo.common.serialize.SerializationException: com.alibaba.fastjson2.JSONException: not s
    查看>>
    sqlserver学习笔记(三)—— 为数据库添加新的用户
    查看>>
    org.apache.http.conn.HttpHostConnectException: Connection to refused
    查看>>
    org.apache.ibatis.binding.BindingException: Invalid bound statement错误一例
    查看>>