1378油滴扩展

https://www.luogu.com.cn/problem/P1378

P1378 油滴扩展

题目描述

在一个长方形框子里,最多有 N 个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界。必须等一个油滴扩展完毕才能放置下一个油滴。那么应该按照怎样的顺序在这 N 个点上放置油滴,才能使放置完毕后所有油滴占据的总面积最大呢?(不同的油滴不会相互融合)

注:圆的面积公式 S = \pi r^2,其中 r 为圆的半径。

输入格式

第一行,一个整数 N

第二行,四个整数 x, y, x', y',表示长方形边框一个顶点及其对角顶点的坐标。

接下来 N 行,第 i 行两个整数 x_i, y_i,表示盒子内第 i 个点的坐标。

输出格式

一行,一个整数,长方形盒子剩余的最小空间(结果四舍五入输出)。

输入输出样例 #1

输入 #1

2
20 0 10 10
13 3
17 7

输出 #1

50

说明/提示

对于 100\% 的数据,1 \le N \le 6,坐标范围在 [-1000, 1000] 内。

代码:

import sys
input=sys.stdin.readline
n=int(input())
a,b,c,d=map(int,input().split())
x=[]
y=[]
r=[0]*n
max_ans=0
for i in range(n):
    x_a,y_a=map(int,input().split())
    x.append(x_a)
    y.append(y_a)
bool1=[0]*n
def cul(i,r,x,y):
    global a,b,c,d,n
    min_dis=1e10
    min_r=1e10
    for j in range(0,n):

        if i!=j and bool1[j]==1 :
            min_r=min(((x[i]-x[j])**2+(y[i]-y[j])**2)**0.5-r[j],min_r)
    min_dis=min(abs(a-x[i]),abs(c-x[i]),abs(b-y[i]),abs(d-y[i]),min_dis)
    min_r=min(max(min_r,0),min_dis)
    return min_r,3.1415926535*min_r**2

def dfs(k,ans):
    global n ,bool1,x,y,max_ans,r
    
    if k>=n:
        max_ans=max(ans,max_ans)
        return
    for j in range(n):
        if (1-bool1[j]):
            r[j],s=cul(j,r,x,y)
            bool1[j]=1
            dfs(k+1,ans+s)
            bool1[j]=0
dfs(0,0)
print(round(abs(a-c)*abs(b-d)-max_ans))

题解:

这道题是枚举,DFS。

关键是DFS的递归怎么写,分析题目,发现是所有情况为全排列,使用选择法,已选的圆形给上标记用s[ ]数组记录,dfs函数结束,再消除标记。

另外,要注意\pi的精度问题,\pi要取多一点位数。

全部评论

相关推荐

在研究求职打法的丹尼...:你们学校能毕业应该就不愁工作了
点赞 评论 收藏
分享
哈啰大家 喵弟面试经验分享~bg:末9本投递:某杭州初创面试难度:地狱(因为是我第一次面试 很多都没准备)结果:秒挂11.20 初创公司面经1.看你简历中写到过实习经历,讲一下自己实习中都做了什么(说了一下实习的内容)2.看我的简历中写了MCP 你知道什么是MCP吗(不知 但其实这个实习就单纯做的数据标注和生产)3.那说说你的项目吧 派聪明项目中的东西4.ollma docker es等 都说不太认识5.说了一下jwt 组成是什么 作用6.开始redis部分 先问了redis相关的基础知识 项目中有没有redis相关的内容 (回答了zset)7.讲讲zset吧 什么底层原理 你又在项目中怎么实现的 (说了排行榜机制)8.说一下你的排行榜怎么保证加分的机制呢9.redis持久化有过了解吗 (说的aof和rdb)10.redis分布式了解过吗 (说的只了解分布式锁)11.那分布式锁的实现方式是怎么做的 为什么redis可以实现分布式锁(根本不知道)12.消息队列了解吗 rocketmq了解吗 (暂时还没看 不太了解)13.说的redis消息队列 两种模式 redis消息队列会出现什么问题 (说的会出现线程安全)14.那怎么解决这个线程安全问题 (回答的用zset来解决)15.说说mysql吧 你了解哪些mysql存储引擎? (说的innodb myisam)那innodb和其他俩的区别是什么16.innodb的锁颗粒度能分到多少呢17.事务的隔离级别 (读未 读已 可重复 串行化) 他们的优缺点18.场景 abc联合索引 ac ab都是怎么样的 (回答的都可以命中索引 他说我说的不对)19.说到了spring 讲讲bean吧 问到了bean的作用域(回答的很差) 存在哪些问题 (整个面试流程中但凡能继续深问的问题都问了这个 我不明白)20.说到了spring mvc 讲一下mvc的核心组件21.反问总结:当时觉得这个小公司要求我会的好多 但现在看来 真的挺基础 这次的面试之后 我搭配着AI 给我的实践经历总结了一下(因为这个字节实习实际上就一干脏活的 项目结束后也没给实习证明 给的是实践证明 当时报名这个项目的时候说给实习证明 被骗了 服了 但是为了找第一段寒假实习 我还是得包装一下讲一下的 现在能讲出很多)然后每天让AI按着我的简历面试我 八股我就逐渐熟悉了
文化小流氓:你的来时路会让你越来越强
查看18道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务