bzoj4306: 玩具厂
Description
Input
Output
Sample Input
50
25
25
50
1
2
3
2
1
Sample Output
0.000
0.000
0.090
0.821
HINT
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#define maxn 100005
#define eps 1E-9
#define inf 1E100
using namespace std;
int n,flag,cnt,siz,pos[maxn];
double w[maxn],d[maxn],dist[maxn],tot,tmp,ans,t1,t2,t3,val[maxn];
double a,b,l,r,f[maxn],p[maxn];
struct Line{
double k,b;
int id;
}line[maxn],tl[maxn];
bool cmp(Line x,Line y){
if (abs(x.k-y.k)>eps) return x.k>y.k;
return x.b<y.b;
}
double calc(Line l1,Line l2){return -(l1.b-l2.b)/(l1.k-l2.k);}
struct DATA{
double x;
int id;
}list[maxn];
void solve(){
memcpy(tl,line,sizeof(line));
sort(tl+,tl+n+,cmp);
for (int i=,j,t;i<=n;i=j){
line[++cnt]=tl[i],t=;
for (j=i;tl[j].k==tl[i].k;j++) if (tl[j].b==tl[i].b) pos[tl[j].id]=cnt,t++;
for (j=i;tl[j].k==tl[i].k;j++) if (tl[j].b==tl[i].b) p[tl[j].id]=1.0/t;
}
list[siz=]=(DATA){-inf,};
for (int i=;i<=cnt;i++){
double t=calc(line[i],line[list[siz].id]);
while (t<list[siz].x) siz--,t=calc(line[i],line[list[siz].id]);
list[++siz]=(DATA){t,i};
}
list[++siz]=(DATA){inf,cnt+};
l=a,r=b,flag=;
for (int i=;i<=siz&&flag!=;i++){
if (list[i].x>l){
if (!flag) flag=,f[list[i-].id]=(list[i].x-l)/(r-l);
else if (flag==&&list[i].x<r) f[list[i-].id]=(list[i].x-list[i-].x)/(r-l);
else if (list[i].x>=r) f[list[i-].id]=(r-list[i-].x)/(r-l),flag=;
}
}
for (int i=;i<=n;i++) p[i]=f[pos[i]]*p[i];
for (int i=;i<=n;i++) printf("%.3lf\n",p[i]);
}
int main(){
scanf("%d%lf%lf",&n,&a,&b);
for (int i=;i<n;i++) scanf("%lf",&w[i]);
for (int i=;i<=n;i++) scanf("%lf",&d[i]);
for (int i=;i<=n;i++) dist[i]=d[i];
for (int i=;i<=n;i++) dist[i]+=dist[i-];
tot=dist[n];
if (a==b){
w[n]=a;
t1=w[]*tot,t3=w[];
for (int i=;i<=n;i++){
tmp+=w[i]*(dist[i]-dist[])*(tot-dist[i]+dist[]);
t1+=w[i]*(dist[i]-dist[]);
t2+=w[i]*(tot-dist[i]+dist[]);
t3+=w[i];
}
val[]=ans=tmp;
for (int i=;i<=n;i++){
tmp+=t1*d[i]-t2*d[i]-t3*d[i]*d[i];
ans=min(ans,tmp);
val[i]=tmp;
t1+=w[i]*tot,t2-=w[i]*tot;
t1-=t3*d[i],t2+=t3*d[i];
}
cnt=;
for (int i=;i<=n;i++) if (abs(val[i]-ans)<=eps) cnt++;
for (int i=;i<=n;i++) if (abs(val[i]-ans)<=eps) printf("%.3lf\n",1.0/cnt);
else puts("0.000");
return ;
}
l=,r=tot;
for (int i=;i<=n;i++) l+=d[i],r-=d[i],line[i].k=l*r;
t1=w[]*tot,t3=w[];
for (int i=;i<=n;i++){
tmp+=w[i]*(dist[i]-dist[])*(tot-dist[i]+dist[]);
t1+=w[i]*(dist[i]-dist[]);
t2+=w[i]*(tot-dist[i]+dist[]);
t3+=w[i];
}
line[].b=tmp;
for (int i=;i<=n;i++){
tmp+=t1*d[i]-t2*d[i]-t3*d[i]*d[i];
line[i].b=tmp;
t1+=w[i]*tot,t2-=w[i]*tot;
t1-=t3*d[i],t2+=t3*d[i];
}
for (int i=;i<=n;i++) line[i].id=i;
solve();
return ;
}
bzoj4306: 玩具厂的更多相关文章
- C#设计模式之装饰者
IronMan之装饰者 前言 上一篇的文章我们讲到要给"IronMan"配备"武器",并且还使用了"武器",效果还是不错的,对于多种环境.多 ...
- C#设计模式之工厂
IronMan之工厂 前言 实用为主,学一些用得到的技术更能在如今的社会里保命. 虽然在日常的工作中设计模式不是经常的用到,但是呢,学习它只有好处没有坏处. 设计模式像是一种“标签”,它是代码编写者思 ...
- 2017.07.11【NOIP提高组】模拟赛B组
Summary 今天的比赛打得还不错,第一题被同桌灌输的贪心,纯模拟洗脑了,然后steal的看了一下,发现怎么也对不了,一直在检查.最后10分钟才找出反例,推出动态规划方程,没有想到怎么转移,比赛就结 ...
- python 全栈开发,Day132(玩具管理页面,控制玩具通讯录,基于请求的好友关系建立)
先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.5.zip 注意:由于涉及到 ...
- python 全栈开发,Day129(玩具开机提示语,为多个玩具发送点播,聊天界面,app录音,app与服务器端文件传输,简单的对话)
一.玩具开机提示语 先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.2.zi ...
- 45.更新一下scrapy爬取工商信息爬虫代码
这里是完整的工商信息采集代码,不过此程序需要配合代理ip软件使用.问题:1.网站对ip之前没做限制,但是采集了一段时间就被检测到设置了反爬,每个ip只能访问十多次左右就被限制访问.2.网站对请求头的检 ...
- VR与AR的发展趋势分析
概要 你是否想象过与神秘的深海生物近距离接触?你是否梦想过穿戴钢铁侠那样的超先进科技装备成为超级英雄?你又是否幻想过与梦中的女神面对面的交流?这些可能在以前都只能是存在于脑海中的幻想,可是在如今有一项 ...
- 《深入浅出数据分析》-利用Excel的Solver求橡皮玩具的最大利润
背景:一玩具厂可以生产两种浴盆玩具,分别是橡皮鸭和橡皮鱼,并且原材料和生产时间都有所限制,求如何才分配生产两种玩具的数量才可以让厂商达到最大利润. 假设条件如下: 产品名称 数量 duck a ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
随机推荐
- Tangled in Cables(Kruskal+map容器处理字符串)
/** 题意: 给你两个城市之间的道路(无向图),求出需要的 电缆.如果大于所提供的,就输出Not enough ... 否则输出所需要的电缆长度. 输入:N (给 ...
- [转] 关于C++中模板中的typename和class的区别比较
C++箴言:理解typename的两个含义 转自http://blog.csdn.net/dick_china/article/details/4522253 问题:在下面的 template dec ...
- SRM 399(1-250pt)
DIV1 250pt 题意:给出一个size不超过50的数组a和整数n,求x,y,z使得|n - x*y*z|最小,且x,y,z均不再数组a中.若有多组xyz使得|n-x*y*z|最小,输出字典序最小 ...
- Android注解利器:ButterKnife 的基本使用
前言 ButterKnife 简介 ButterKnife是一个专注于Android系统的View注入框架,可以减少大量的findViewById以及setOnClickListener代码,可视化一 ...
- codeforces 546B
Description Colonel has n badges. He wants to give one badge to every of his n soldiers. Each badge ...
- 【转】JavaScript对Json节点的增删改
var json = { "age":24, "name":"cst" }; //修改Json中的age值,因为Json中存在age属性 j ...
- springboot 配置文件 .properties和.yml的写法区别
例如 : redis配置的properties或yml文件,如下: spring.redis.cluster.nodes[]= spring.redis.cluster.nodes[]= 或 s ...
- SCOI2014 方伯伯的OJ onlinejudge
终于用自己的方法水过去了. 本地测慢的一组要三四秒,一共要十几秒,BZOJ貌似一共只让跑6s,于是就还T着的. 一开始没看n<=1e8,想的直接splay+map(splay维护名次,map维护 ...
- [转]【基于zxing的编解码实战】精简Barcode Scanner篇
通过<[搞定条形码]zxing项目源码解读(2.3.0版本,Android部分)>的分析,现在可以实现最终目标了:精简Barcode Scanner并将其中的编码和解码分离为两个独立的部分 ...
- PHP安全编程:网站安全设计的一些原则(转)
深度防范 深度防范原则是安全专业人员人人皆知的原则,它说明了冗余安全措施的价值,这是被历史所证明的. 深度防范原则可以延伸到其它领域,不仅仅是局限于编程领域.使用过备份伞的跳伞队员可以证明有冗余安全措 ...