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要取多一点位数。

全部评论

相关推荐

昨天 23:10
门头沟学院 Java
1. 介绍一下面向对象2. arraylist和linkedlist的区别3. hashmap是线程安全的吗?concurrenthashmap做了哪些优化保证他是线程安全的?4. jdk1.8做了cas+sychronized的优化,为什么要做这种优化?5. cas解决不了什么问题?6. 往线程池提交一个任务,会发生什么过程?7. jvm的类加载机制?知道双亲委派模型吗?tomcat打破了双亲委派模型,为什么要打破他?8. redis实现缓存,缓存的key是什么?9. 什么是旁路缓存机制?写和查询的时候具体是怎么操作的?10. 为什么不能先删除缓存再更新数据库?11. 布隆过滤器和bitmap的区别?12. 四种事务隔离级别?13. 在可重复读下面innodb解决了幻读问题,是怎么解决的?14. 介绍一下mvcc15. 做一个sql的问题,分析执行的过程,应该对a表和b表加什么样的索引?16. spring中出现过事务注解失效的场景吗?为什么会失效呢?private和this调用 本质都是动态代理失效的问题17. mybatis接口的方法可以重载吗?为什么不可以重载?18. mq是解决什么问题?如何保证消息的可靠性?19. 怎么保证消息不被重复消费?回答用订单状态保证幂等性,反问除了订单状态保证幂等性以外还有什么可以保证幂等性吗?没答上来20. 为什么选择了rabbitmq?21. 死锁的四个必要条件?22. 有哪些页面置换算法?23. 解释一下tcp三次握手连接的过程,为什么要三次握手?24. 平常使用git的场景?25. 日常工作学习当中会使用ai大模型吗?有自己的cursor账号吗?举个使用ai大模型的例子?26. 算法题:力扣第143题重排链表,最开始不要求空间复杂度,用list装了一下节点过了,反问优化思路,回答先用快慢指针找到中间点,然后对后面的链表做反转链表,然后再进行拼接,可以把复杂度降到O(1)
投递美团等公司9个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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