http://www.lydsy.com/JudgeOnline/problem.php?id=1027

因为x+y+z=1,所以z=1-x-y

第三维可以忽略

将x,y 看做 平面上的点

简化问题:

若只有两种 材料,那么可以合成 两点线段 上的所有的点

推广到多种材料:

若 用户点 在 材料点 构成的 凸包内,则可以合成

所以题目转化为 求材料点 组成的 能包含所有用户点 的 最小环

用Floyd

枚举 每两对材料点,若所有用户点在 在线段的左侧或在线段上

则 f[i][j]=1 表示i到j之间有一条边

叉积判断 点在直线的哪一侧

所以 如果是在 直线上,还要特判是否在线段上

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; #define N 501 const double eps=1e-; struct node
{
double x,y,z;
}metal[N],user[N]; int f[N][N]; double cross(node a,node b,node p)
{
double xa=b.x-a.x;
double ya=b.y-a.y;
double xb=p.x-a.x;
double yb=p.y-a.y;
return xa*yb-xb*ya;
} double getdis(node a,node b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
} int main()
{
int m,n;
scanf("%d%d",&m,&n);
for(int i=;i<=m;++i) scanf("%lf%lf%lf",&metal[i].x,&metal[i].y,&metal[i].z);
for(int i=;i<=n;++i) scanf("%lf%lf%lf",&user[i].x,&user[i].y,&user[i].z);
memset(f,,sizeof(f));
int k;
double tmp,dis1,dis2;
for(int i=;i<=m;++i)
{
for(int j=;j<=m;++j)
{
for(k=;k<=n;++k)
{
tmp=cross(metal[i],metal[j],user[k]);
if(fabs(tmp)>eps)
{
if(tmp>) continue;
break;
}
dis1=getdis(metal[i],user[k]);
dis2=getdis(metal[i],metal[j]);
if(fabs(tmp)<eps && fabs(dis1-dis2)>eps && dis1>dis2) break;
}
if(k==n+) f[i][j]=;
}
}
for(int k=;k<=m;++k)
for(int i=;i<=m;++i)
for(int j=;j<=m;++j)
f[i][j]=min(f[i][k]+f[k][j],f[i][j]);
int ans=m+;
for(int i=;i<=m;++i) ans=min(ans,f[i][i]);
if(ans==m+) ans=-;
printf("%d",ans);
}

1027: [JSOI2007]合金

Time Limit: 4 Sec  Memory Limit: 162 MB
Submit: 4407  Solved: 1327
[Submit][Status][Discuss]

Description

  某公司加工一种由铁、铝、锡组成的合金。他们的工作很简单。首先进口一些铁铝锡合金原材料,不同种类的
原材料中铁铝锡的比重不同。然后,将每种原材料取出一定量,经过融解、混合,得到新的合金。新的合金的铁铝
锡比重为用户所需要的比重。 现在,用户给出了n种他们需要的合金,以及每种合金中铁铝锡的比重。公司希望能
够订购最少种类的原材料,并且使用这些原材料可以加工出用户需要的所有种类的合金。

Input

  第一行两个整数m和n(m, n ≤ 500),分别表示原材料种数和用户需要的合金种数。第2到m + 1行,每行三
个实数a, b, c(a, b, c ≥ 0 且 a + b + c = 1),分别表示铁铝锡在一种原材料中所占的比重。第m + 2到m +
 n + 1行,每行三个实数a, b, c(a, b, c ≥ 0 且 a + b + c = 1),分别表示铁铝锡在一种用户需要的合金中
所占的比重。

Output

  一个整数,表示最少需要的原材料种数。若无解,则输出–1。

Sample Input

10 10
0.1 0.2 0.7
0.2 0.3 0.5
0.3 0.4 0.3
0.4 0.5 0.1
0.5 0.1 0.4
0.6 0.2 0.2
0.7 0.3 0
0.8 0.1 0.1
0.9 0.1 0
1 0 0
0.1 0.2 0.7
0.2 0.3 0.5
0.3 0.4 0.3
0.4 0.5 0.1
0.5 0.1 0.4
0.6 0.2 0.2
0.7 0.3 0
0.8 0.1 0.1
0.9 0.1 0
1 0 0

Sample Output

5

bzoj千题计划123:bzoj1027: [JSOI2007]合金的更多相关文章

  1. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  2. bzoj千题计划120:bzoj1032[JSOI2007]祖码Zuma

    http://www.lydsy.com/JudgeOnline/problem.php?id=1032 https://www.luogu.org/discuss/show?postid=8416 ...

  3. bzoj千题计划119:bzoj1029: [JSOI2007]建筑抢修

    http://www.lydsy.com/JudgeOnline/problem.php?id=1029 把任务按截止时间从小到大排序 如果当前时间+当前任务耗时<=当前任务截止时间,把这个任务 ...

  4. bzoj千题计划118:bzoj1028: [JSOI2007]麻将

    http://www.lydsy.com/JudgeOnline/problem.php?id=1028 枚举等待牌 枚举对是哪个 判断 #include<cstdio> #include ...

  5. bzoj千题计划196:bzoj4826: [Hnoi2017]影魔

    http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...

  6. bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪

    http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...

  7. bzoj千题计划252:bzoj1095: [ZJOI2007]Hide 捉迷藏

    http://www.lydsy.com/JudgeOnline/problem.php?id=1095 点分树+堆 请去看 http://www.cnblogs.com/TheRoadToTheGo ...

  8. bzoj千题计划177:bzoj1858: [Scoi2010]序列操作

    http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...

  9. bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)

    https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...

随机推荐

  1. Java Lock & Condition

    /* jdk1.5以后将同步和锁封装成了对象. 并将操作锁的隐式方式定义到了该对象中, 将隐式动作变成了显示动作. Lock接口: 出现替代了同步代码块或者同步函数.将同步的隐式锁操作变成现实锁操作. ...

  2. 运行时错误 429,ACTIVEX部件不能创建对象的解决方法小结

    错误描述: 发布在IIS上面的网站运行时出现如下错误: Microsoft VBscrīpt 运行时错误 错误 '800a01ad' ActiveX 部件不能创建对象 这个错误是asp组件未注册,而导 ...

  3. 6th Alpha阶段的postmortem报告

    组名:好好学习(代组长发布)  会议重要内容记录: 1.  尝试在beta阶段实现的功能,与alpha阶段相比的优势 (1)更改软件现有的bug: 1)软件的账目只能输入,但是一旦发生失误却无法更改和 ...

  4. HttpURLConnection、HttpClient和Session

    原文地址:http://www.cnblogs.com/kross/p/3615695.html 一直没弄懂Session,cookies什么的登陆验证到底是怎么回事,昨天分别用HttpURLConn ...

  5. springMVC 访问静态资源

    问题描述 使用SpringMVC时遇到静态资源无法加载的问题,报404 问题原因 如果SpringMVC的映射模式采用的是后缀名匹配,如[*.do]或者[*.action]则不会出现该问题,因为静态资 ...

  6. java 创建过程

  7. PostgreSQL窗口函数

    窗口函数允许在查询的SELECT列表和ORDER BY子句中使用. 如果有排序,要保证唯一,否则会有下面的错误: 修改方式是:保证唯一,修改方法如下:

  8. [BZOJ3230] 相似字串 后缀数组+RMQ

    3230: 相似子串 Time Limit: 20 Sec  Memory Limit: 128 MB Description Input 输入第1行,包含3个整数N,Q.Q代表询问组数.第2行是字符 ...

  9. 获取远程图片的Blob资源

    原文地址:http://www.cnblogs.com/JimmyBright/p/7681092.html 思路:js获取远程资源的blob会涉及到跨域的问题,所以需要中转一下,具体是使用php的c ...

  10. 【BZOJ4036】按位或(Min-Max容斥,FWT)

    [BZOJ4036]按位或(Min-Max容斥,FWT) 题面 BZOJ 洛谷 题解 很明显直接套用\(min-max\)容斥. 设\(E(max\{S\})\)表示\(S\)中最晚出现元素出现时间的 ...