zoukankan      html  css  js  c++  java
  • bzoj4109: [Wf2015]Cutting Cheese

    Description

    给定一个100*100*100(单位:毫米)的奶酪方块,这个奶酪含有n个球形小孔。现在要求将这个奶酪切成s片使得每片质量相等。

    Input

    第一行包含两个整数n,s,表示奶酪有n个小空,要切成s片(0≤n≤10000,1≤s≤100)

    接下来n行每行包含四个正整数r,x,y,z来描述每个小孔,r代表半径,(x,y,z)代表球心坐标。0≤r,x,y,z≤100,000(单位:微米)
    我们假定切割必须垂直于z轴。对于小孔,孔与孔之间不会重叠(但可能相切),且每个孔都完全被奶酪包含(可能与奶酪边界相切)。

    Output

    从边界z=0依次输出每片的厚度(单位:毫米),输出答案与标准答案的相对误差或绝对误差不超过1e-6。

    二分答案,由于球互不相交所以体积很好算,不完整的球体积用定积分可以推出公式,完整的用球的体积公式

    #include<cstdio>
    #include<cmath>
    typedef long double ld;
    const ld pi=acos(-1.);
    int n,s;
    ld zs[10010],rs[10010],ps[110];
    ld V=1000000;
    ld get(ld x){
        ld a=x*10000;
        for(int i=0;i<n;i++)if(zs[i]+rs[i]<=x){
            a-=rs[i]*rs[i]*rs[i]*(4./3.*pi);
        }else if(zs[i]-rs[i]<x){
            ld z=x-zs[i];
            a-=2./3.*pi*rs[i]*rs[i]*rs[i]+pi*(rs[i]*rs[i]*z-z*z*z/3.);
        }
        return a;
    }
    ld cal(ld V){
        ld L=0,R=100,M;
        while(L+1e-10<R){
            M=(L+R)*.5;
            if(get(M)<V)L=M;
            else R=M;
        }
        return L;
    }
    ld cals(ld x){
        ld a=10000;
        for(int i=0;i<n;i++)if(zs[i]+rs[i]>=x&&zs[i]-rs[i]<=x){
            ld z=x-zs[i];
            a-=pi*(rs[i]*rs[i]-z*z);
        }
        return a;
    }
    int main(){
        scanf("%d%d",&n,&s);
        for(int i=0,x;i<n;i++){
            scanf("%d",&x);
            rs[i]=x*0.001;
            scanf("%d",&x);
            scanf("%d",&x);
            scanf("%d",&x);
            zs[i]=x*0.001;
            V-=rs[i]*rs[i]*rs[i]*(4./3.*pi);
        }
        ps[0]=0;
        for(int i=1;i<=s;i++)ps[i]=cal(i*V/s);
        for(int i=1;i<=s;i++)printf("%.9Lf
    ",ps[i]-ps[i-1]);
        return 0;
    }
  • 相关阅读:
    网络基础 HTTP协议之http url简介
    MySql 简单统计查询消耗时间脚本
    Java java jdk在Linux下安装与环境变量的配置
    MySql 正则表达式简介及使用
    MySql UNIX_TIMESTAMP和FROM_UNIXTIME函数讲解
    MySql 定时任务的使用
    MySql 利用crontab实现MySql定时任务
    MySql 利用mysql&mysqldum导入导出数据
    排错-windows平台下访问oracle em出现空白的解决方法
    Oracle 修改oracle数据库名
  • 原文地址:https://www.cnblogs.com/ccz181078/p/5638956.html
Copyright © 2011-2022 走看看