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(-.);
int n,s;
ld zs[],rs[],ps[];
ld V=;
ld get(ld x){
ld a=x*;
for(int i=;i<n;i++)if(zs[i]+rs[i]<=x){
a-=rs[i]*rs[i]*rs[i]*(./.*pi);
}else if(zs[i]-rs[i]<x){
ld z=x-zs[i];
a-=./.*pi*rs[i]*rs[i]*rs[i]+pi*(rs[i]*rs[i]*z-z*z*z/.);
}
return a;
}
ld cal(ld V){
ld L=,R=,M;
while(L+1e-<R){
M=(L+R)*.;
if(get(M)<V)L=M;
else R=M;
}
return L;
}
ld cals(ld x){
ld a=;
for(int i=;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=,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]*(./.*pi);
}
ps[]=;
for(int i=;i<=s;i++)ps[i]=cal(i*V/s);
for(int i=;i<=s;i++)printf("%.9Lf\n",ps[i]-ps[i-]);
return ;
}

bzoj4109: [Wf2015]Cutting Cheese的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. BZOJ4115 : [Wf2015]Tile Cutting

    设一种方案里三角形上三个点的坐标分别为$(0,0),(-a,b),(c,d)$,则得到的平行四边形的面积为$ac+bd$. 设$d(n)$为$n$的约数个数,$D$为$d$的生成函数,则答案的生成函数 ...

  3. CF 371B Fox Dividing Cheese[数论]

    B. Fox Dividing Cheese time limit per test 1 second memory limit per test 256 megabytes input standa ...

  4. hdu 1078 FatMouse and Cheese

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  5. [ACM_几何] Metal Cutting(POJ1514)半平面割与全排暴力切割方案

    Description In order to build a ship to travel to Eindhoven, The Netherlands, various sheet metal pa ...

  6. 贪心 Codeforces Round #300 A Cutting Banner

    题目传送门 /* 贪心水题:首先,最少的个数为n最大的一位数字mx,因为需要用1累加得到mx, 接下来mx次循环,若是0,输出0:若是1,输出1,s[j]--: 注意:之前的0的要忽略 */ #inc ...

  7. 水题 Codeforces Round #300 A Cutting Banner

    题目传送门 /* 水题:一开始看错题意,以为是任意切割,DFS来做:结果只是在中间切出一段来 判断是否余下的是 "CODEFORCES" :) */ #include <cs ...

  8. HDU 1078 FatMouse and Cheese(记忆化搜索)

    FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  9. ZOJ 1107 FatMouse and Cheese

    原题链接 题目大意:FM在一个街道n*n街道的(0,0)点,在每个网格里放着cheese,他要尽可能多的吃这些cheese.有两个规则:1)他跑的总距离不能超过k步:2)下一个节点的cheese的块数 ...

随机推荐

  1. hdu 4253 Two Famous Companies BZOJ 2654 tree

    [题意]:给出n个点,m条边,边分为两种,一种是A公司的,一种是B公司的.边上有权值,问用n-1条边把n个点连起来的最小费用是多少,其中A公司的边刚好有k条.题目保证有解. 思路:我们发现,如果我们给 ...

  2. 利用powerdesigner反向数据库结构,生成ER图

    参考月下狼~图腾~:<利用powerdesigner反向数据库结构,生成ER图> https://www.zybuluo.com/Jpz/note/123582 首先新建一个"P ...

  3. HDU 4358 莫队算法+dfs序+离散化

    Boring counting Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 98304/98304 K (Java/Others)T ...

  4. SpringMVC4零配置--Web上下文配置【MvcConfig】

    与SpringSecurity的配置类似,spring同样为我们提供了一个实现类WebMvcConfigurationSupport和一个注解@EnableWebMvc以帮助我们减少bean的声明. ...

  5. UVa 10082 WERTYU

    UVa 10082 题目大意:把手放在键盘上时,稍微不注意就会往右错一位.这样,输入Q就会变成输入W,输入J会变成输入K等等, 输入一个错位后敲出的字符串(所有字母均大写),输出程序员本来想打的句子. ...

  6. 远程升级openSSH

    1.确认安装了telnet服务,并且telnet服务能正常运行 查询是否安装了telnet服务:rpm -qa telnet 如果显示出 类似于telnet-server-0.17-31.EL4.5这 ...

  7. 两篇很牛的vim使用技巧

    读本文之前请注意: 1. 本文的目标是提供一些vim的使用技巧,利用这些技巧可以提高vim的操作效率.部分技巧在vi上也可以使用,但是现在基本上都是用vim了. 2. 本文是整理和总结使用技巧,而非讲 ...

  8. FreeSWITCH安装报错“You must install libyuv-dev to build mod_fsv”的解决方案

    昨天下午安装FreeSWITCH时遇到该问题时,整了一个下午都没解决,也走了许多弯路.如果直接通过yum安装libyuv-devel时,会报错说找不到该安装包.后来又通过FreeSWITCH官网的网上 ...

  9. C# Development 13 Things Every C# Developer Should Know

    https://dzone.com/refcardz/csharp C#Development 13 Things Every C# Developer Should Know Written by ...

  10. easyUI之layout

    此组件与easyUI中的其它组件加载的方式相同,载为class方式和js方式,但此组件更多的是用class方式,其它的用js方式更为灵活.它继承panel组件及resize组件. 包括多个<di ...