题目描述

某公司加工一种由铁、铝、锡组成的合金。他们的工作很简单。首先进口一些铁铝锡合金原材料,不同种类的原材料中铁铝锡的比重不同。然后,将每种原材料取出一定量,经过融解、混合,得到新的合金。新的合金的铁铝锡比重为用户所需要的比重。

现在,用户给出了n种他们需要的合金,以及每种合金中铁铝锡的比重。公司希望能够订购最少种类的原材料,并且使用这些原材料可以加工出用户需要的所有种类的合金。

输入输出格式

输入格式:

第一行两个整数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),分别表示铁铝锡在一种用户需要的合金中

所占的比重。

输出格式:

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

输入输出样例

输入样例#1:

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

没有忍住又去康了一道计算几何。。。  首先不难发现c是一个没有用的量,,,因为a+b+c=1了,所以c=1-a-b,当a,b都被满足的时候c肯定也被满足了。所以只考虑a,b就行了。  又因为能被平面内若干个点代表的向量线性组合出的向量一定是在平面内这几个点构成的凸包内,所以题目就变成了找最少的几个点使得它们形成的凸包包含所有需求点。

  这也等价于找一条从一个点出发的回路,使得需求点都在回路上的边的左边且回路上的边数最小。所以建个图跑个floyed就行了
#include<bits/stdc++.h>
#define ll long long
#define maxn 1005
using namespace std;
const double eps=0.000000001;
double a,b,c;
int n,m,dis[maxn][maxn];
struct node{double x,y;node operator -(const node& u)const{return (node){x-u.x,y-u.y};}
}base[maxn],user[maxn];inline int zt(double x){if(fabs(x)<=eps) return 0;return x>0?1:-1;
}inline double pointmul(node x,node y){return x.x*y.x+x.y*y.y;
}inline double Xmul(node x,node y){return x.x*y.y-y.x*x.y;
}int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n+m;i++){scanf("%lf%lf%lf",&a,&b,&c);if(i<=n) base[i]=(node){a,b};else user[i-n]=(node){a,b};}memset(dis,0x3f,sizeof(dis));
//    for(int i=1;i<=n;i++) dis[i][i]=0;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){bool flag=1;node vec=base[j]-base[i];for(int k=1;k<=m;k++){double X=zt(Xmul(vec,user[k]-base[i]));if(X<0||(!X&&zt(pointmul(user[k]-base[i],user[k]-base[j]))>0)){flag=0;break;}}if(flag) dis[i][j]=1;}int ans=1<<30;for(int k=1;k<=n;k++)for(int j=1;j<=n;j++)for(int i=1;i<=n;i++) dis[j][i]=min(dis[j][i],dis[j][k]+dis[k][i]);for(int i=1;i<=n;i++) ans=min(ans,dis[i][i]);if(ans>n) puts("-1");else printf("%d\n",ans);return 0;
}

 

转载于:https://www.cnblogs.com/JYYHH/p/8390650.html

[JSOI2007]合金相关推荐

  1. bzoj 1027: [JSOI2007]合金(floyd最小环)

    1027: [JSOI2007]合金 Time Limit: 4 Sec  Memory Limit: 162 MB Submit: 4136  Solved: 1209 [Submit][Statu ...

  2. [bzoj1027][JSOI2007]合金

    来自FallDream的博客,未经允许,请勿转载,谢谢. 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的 原材料中铁铝锡的比重不同.然后,将每种原材料 ...

  3. BZOJ1027 [JSOI2007]合金 【计算几何 + floyd】

    题目 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的 原材料中铁铝锡的比重不同.然后,将每种原材料取出一定量,经过融解.混合,得到新的合金.新的合金的 ...

  4. Bzoj1027 [JSOI2007]合金

    Time Limit: 4 Sec  Memory Limit: 162 MB Submit: 3823  Solved: 1115 Description 某公司加工一种由铁.铝.锡组成的合金.他们 ...

  5. BZOJ-1027 [JSOI2007]合金

    首先,我们可以舍弃掉第三维,那样的话每种金属就是平面上的点了. 对于任意两个点x,y,假如用户点都不在右边,则从x至y连条长度为1的有向边. 然后Flody求个最小环. #include <cs ...

  6. 清北学堂学习笔记 第一期

    Day 1 1.贪心的奇怪方法:调整法 调整法,顾名思义,就是用别的方式进行题目的分析以及证明,例如说luogu的最大乘积.这种题目的主要分析思路为:先考虑一些简单的情况,通过简单的情况来推出一些有用 ...

  7. java file 相对路径 根目录修改_java中使用相对路径读取文件的写法总结 ,以及getResourceAsStream() (转)...

    https://blog.csdn.net/my__sun_/article/details/74450241 读取文件的写法,相对路径 在当前的目录结构中读取test.txt的有四种写法 简单粗暴的 ...

  8. 2019.3.summary

    emmmm,把以前写的2b总结丢上来吧,不过应该也不会有人看QAQ (注:因为用txt写的,有一些公式打的很随意,放到markdown上公式自动排版,有可能会显示出错误!可在下方留言) 2019.2. ...

  9. 【bzoj1029】【JSOI2007】建筑抢修

    1029: [JSOI2007]建筑抢修 Time Limit: 4 Sec  Memory Limit: 162 MB Submit: 6417  Solved: 2883 [Submit][Sta ...

最新文章

  1. 判断有向图g中顶点i到顶点j是否有路径_[源码和文档分享]基于Dijkstra算法的最短路径问题求解...
  2. 如何自学python爬虫-Python初学者如何从网络爬虫到机器学习?
  3. javascript设计模式-学习笔记
  4. ASPxGridView 结合CheckBox实现多选(在后台事件代码控制)
  5. 开源的一个java 写的图床
  6. zabbix 3.2.3 appliance默认用户名及密码
  7. php 中echo用法,php中echo()函数的用法(附代码)
  8. 社交网络影响力最大化
  9. Extjs EditorGridPanel功能
  10. MAC 如何快捷截图
  11. 信度spss怎么做_实用干货!信度分析超全步骤总结!
  12. Kubernetes1.3:QoS服务质量管理
  13. 网贷公司是什么意思? 网贷公司如何挑选更安心?【理财帮手】
  14. linux虚拟机和电脑ping通(可上网)
  15. 关于心跳包的实现手法
  16. 地下水深度去除铁锰的滤料详解
  17. java—set创建迭代器的两个方法
  18. 3.6.3 Cache和主存的映射方式
  19. SIDUS HEROES链游相关分析
  20. ZBrush 4R7正式上线

热门文章

  1. 安卓上比较好的python开发软件-手机随时随地写Python,还可以开发安卓APP,太厉害了!...
  2. python详细安装教程环境配置-python环境安装详细步骤
  3. python有道翻译-使用python2爬取有道翻译
  4. python爬虫招聘-Python爬虫抓取智联招聘(基础版)
  5. python代码壁纸-70行python代码实现壁纸批量下载
  6. 哪里可以接到python的活干-学了Python以后,我干了很多不是人干的活
  7. python while循环语句-Python中的while循环语句怎么用?
  8. python在线读-文档编辑工具Markdown
  9. python中文解释-python注释和2版本的中文乱码
  10. 如何使用python画折线图-Python数据可视化:使用Python画柱状图和折线图