zoukankan      html  css  js  c++  java
  • P1378 油滴扩展

    题目描述

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

    注:圆的面积公式V=pi*r*r,其中r为圆的半径。

    输入输出格式

    输入格式:

    第1行一个整数N。

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

    接下去N行,每行两个整数xi,yi,表示盒子的N个点的坐标。

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

    输出格式:

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

    输入输出样例

    输入样例#1: 
    2
    20 0 10 10
    13 3
    17 7
    
    输出样例#1: 
    50
    

    Solution:

      本题暴力搜索回溯就$ok$了,注意判断半径时还需考虑某个点包含在另一个圆中的情况,这时应该赋半径为$0$。然后就是注意一下精度问题,和一些玄学东西(不能定义变量$y1,x1$貌似因为这是内置函数中用的变量名,记得开$double$)

    代码:

    #include<bits/stdc++.h>
    #define il inline
    #define ll long long
    #define inf 520520
    #define pi  3.14159265358979323846
    using namespace std;
    double xx1,yy1,xx2,yy2;
    int n;
    double ans;
    bool vis[7];
    struct point{int x,y;double r;}a[7];
    il double abss(double x){return x>0?x:-x;}
    il double pd(int k){
        double p;
        double s1=min(abs(a[k].x-xx1),abs(a[k].x-xx2));
        double s2=min(abs(a[k].y-yy1),abs(a[k].y-yy2));
        p=min(s1,s2);
        for(int i=1;i<=n;i++)
            if(i!=k&&vis[i]){
                double op=abss(sqrt((a[i].x-a[k].x)*(a[i].x-a[k].x)+(a[i].y-a[k].y)*(a[i].y-a[k].y)));
                p=min(p,max(op-a[i].r,0.0));
        }
        return p;
    }
    il void dfs(int now,double area){
        if(now>n){ans=max(ans,area);return;}
        for(int i=1;i<=n;i++)
            if(!vis[i]){
            a[i].r=pd(i),vis[i]=1;
            dfs(now+1,area+a[i].r*a[i].r*pi);
            vis[i]=0;
        }
    }
    int main()
    {
        ios::sync_with_stdio(0);
        cin>>n>>xx1>>yy1>>xx2>>yy2;
        for(int i=1;i<=n;i++)cin>>a[i].x>>a[i].y;
        dfs(1,0);
        cout<<(int)(abss((xx1-xx2)*(yy1-yy2))-ans+0.5);
        return 0;
    }

     

  • 相关阅读:
    streamsets 集成 cratedb 测试
    streamsets k8s 部署试用
    streamsets rest api 转换 graphql
    StreamSets sdc rpc 测试
    StreamSets 相关文章
    StreamSets 多线程 Pipelines
    StreamSets SDC RPC Pipelines说明
    StreamSets 管理 SDC Edge上的pipeline
    StreamSets 部署 Pipelines 到 SDC Edge
    StreamSets 设计Edge pipeline
  • 原文地址:https://www.cnblogs.com/five20/p/8877658.html
Copyright © 2011-2022 走看看