洛谷 P1378 油滴扩展 改错

P1378 油滴扩展

题目描述

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

输入输出格式

输入格式:

第1行一个整数N。

第2行为长方形边框一个顶点及其对角顶点的坐标,\(x,y,x’,y’\)。

接下去\(N\)行,每行两个整数\(x_i,y_i\),表示盒子的\(N\)个点的坐标。

以上所有的数据都在\([-1000,1000]\)内。

输出格式:

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



爆搜一下即可,这个幽默的数据。

然而,它居然问的是最小空间!!!!

我输出了最大面积。。。。

而且样例给的最小空间居然等于最大面积,绝对故意的。。。



code:

#include <cstdio>
#include <cmath>
const int N=7;
const double pi=3.1415926;
int up,ri,le,dow,x[N],y[N],n;
double fmax(double a,double b) {return a>b?a:b;}
double fmin(double a,double b) {return a<b?a:b;}
int min(int a,int b) {return a<b?a:b;}
int abs(int a) {return a>0?a:-a;}
int used[N];
double yuan[N],ans=0,dis[N][N];//圆的半径

double get(int a,int b)
{
    return sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b]));
}

void init()
{
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            dis[i][j]=get(i,j);
}

double get(int id)
{
    double rm=1e300;
    rm=min(min(x[id],ri-x[id]),min(y[id],up-y[id]));
    for(int i=1;i<=n;i++)
        if(yuan[i]!=0)
            rm=fmin(dis[id][i]-yuan[i],rm);
    return fmax(0.0,rm);
}

void dfs(int dep)
{
    if(dep==n+1)
    {
        double sum=0;
        for(int i=1;i<=n;i++)
            sum+=yuan[i]*yuan[i]*pi;
        ans=fmax(sum,ans);
        return;
    }
    for(int i=1;i<=n;i++)
        if(!used[i])
        {
            used[i]=1;
            yuan[i]=get(i);
            dfs(dep+1);
            yuan[i]=0.0;
            used[i]=0;
        }
}

int main()
{
    int x1,y1,x2,y2;
    scanf("%d",&n);
    scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
    up=abs(y1-y2),ri=abs(x1-x2);
    le=min(x1,x2),dow=min(y1,y2);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",x+i,y+i);
        x[i]-=le,y[i]-=dow;
    }
    init();
    dfs(1);
    ans=double(up*ri)-ans;
    int an=int(ans+0.5);
    printf("%d\n",an);
    return 0;
}


2018.5.20

原文地址:https://www.cnblogs.com/ppprseter/p/9064393.html

时间: 2024-12-10 10:33:50

洛谷 P1378 油滴扩展 改错的相关文章

[洛谷P1378]油滴扩展

题目大意:有n滴油在一个平面上,油滴按顺序依次扩展(呈圆形),当碰到其他油滴或平面边界时停止扩展,让你设计一个扩展顺序,使平面剩余面积尽可能小. 解题思路:由于$n\leq 6$,我们可以dfs油滴扩展顺序,然后计算每个油滴能扩展的半径即可.时间复杂度$O(n!)$. 注意:①$\pi$的精度不能太小:②有些油滴包含在另一个油滴内部,则不能扩展:③题目要求四舍五入,则保留0位小数即可. 当然也可以用STL的全排列算法把所有排列求出来,然后按照排列顺序扩展. C++ Code: #include<

P1378 油滴扩展

P1378 油滴扩展 题目描述 在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完毕才能放置下一个油滴.那么应该按照怎样的顺序在这N个点上放置油滴,才能使放置完毕后所有油滴占据的总体积最大呢?(不同的油滴不会相互融合) 注:圆的面积公式V=pi*r*r,其中r为圆的半径. 输入输出格式 输入格式: 第1行一个整数N. 第2行为长方形边框一个顶点及其对角顶点的坐标,x,y,x’,y

Luogu [P1378] 油滴扩展

首先,原题在这 恩,让我们进入正题:油滴扩展——显然,这道题是个搜索题,并且是个打眼一看上去就比较恶心的搜索题. 但是,这道题细节恶心,并不代表这道题思路难. 题意大家都了解了,让我们先来把细节问题坑点解决: 1.坐标范围为[-1000,1000],有负数怎么办? 解决方法很简单粗暴:将所有坐标加上1000就行了,然后就可视为所有坐标都为正数了. 2.让输出的答案为剩余的面积,还要四舍五入. 解决方法也很简单:先搜索求出最大覆盖面积,然后将答案 + = 0.5 ,用矩形总面积减去答案输出即可.

P1378 油滴扩展 - DFS

传送门 思路:由于n<=6,我们可以枚举油滴放置顺序的排列,然后DFS.对于每个油滴,其能扩散的最小半径为min{到四个边界的距离,到已添加的点的扩散范围的最小距离}.最后注意四舍五入:printf("%d",(int)ans+0.5);(其中ans为double类型). AC Code: #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> u

1378 油滴扩展

难度:普及+/提高 题目类型:搜索 提交次数:2 涉及知识:深搜 题目描述 在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完毕才能放置下一个油滴.那么应该按照怎样的顺序在这N个点上放置油滴,才能使放置完毕后所有油滴占据的总体积最大呢?(不同的油滴不会相互融合) 注:圆的面积公式V=pi*r*r,其中r为圆的半径. 输入输出格式 输入格式: 第1行一个整数N. 第2行为长方形边框

luogu cogs 油滴扩展

1076. [NOIP2010冲刺六] 油滴扩展 ★   输入文件:oilbox.in   输出文件:oilbox.out   简单对比 时间限制:1 s   内存限制:128 MB [题目描述] 在一个长方形框子里,最多有N(O≤N≤6)个相异的点.在其中任何一个点上放一个很小的油滴(即半径可视为0),那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完毕才能放置下一个油滴.那么应该按照怎样的顺序在这N个点上放置油滴,才能使放置完毕后所有油滴占据的总面积最大呢?(不同

[LG1378] 油滴扩展

暴力枚举油滴的编号的排列(next_permutation),然后按序一个一个扩展.面积的求最小值即可.也可以深搜. 复杂度 \(O(n!\times n^2)\). #include<cstdio> #include<algorithm> #include<cmath> #define sq(a) ((a)*(a)) #define PI 3.1415926535897932626 using namespace std; int n,l,r,u,d;//rtg in

[题解]洛谷比赛『期末考后的休闲比赛2』

[前言] 这场比赛已经结束了有几天,但我各种忙,虽然AK但还是没来得及写题解.(我才不会告诉你我跑去学数据结构了) T1 区间方差 (就不贴题好了) 首先可以推公式(我们可以知道,线段树然而并不能通过初中学过的方差公式在log(L)内求出方差): (s2表示方差,L表示区间长度,xi表示区间的每一项,最后一个x上画了一根线表示这些数据的平均数) 用二项式定理完全平方公式可得: 再次展开: 另外,再代入以下这个 得到了: 然后继续吧.. 然后duang地一声合并同类项,于是我们得到了: 然后可以高

洛谷P1519 穿越栅栏 Overfencing

P1519 穿越栅栏 Overfencing 69通过 275提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 USACO是100分,洛谷是20分 为什么只有十分 题目描述 描述 农夫John在外面的田野上搭建了一个巨大的用栅栏围成的迷宫.幸运的是,他在迷宫的边界上留出了两段栅栏作为迷宫的出口.更幸运的是,他所建造的迷宫是一个“完美的”迷宫:即你能从迷宫中的任意一点找到一条走出迷宫的路.给定迷宫的宽度W(1<=W<=38)及高度H(1<=H&