Luogu-4049 [JSOI2007]合金
题目中给出了三种金属的比例,实际上只用考虑两个就可以,第三个可以由另外两个确定qwq
如果把原料和需求看做二维平面上的点,可以发现两种原料能混合成的比例就在他们相连的线段上,也就是说线段上的点都能混合出来。所以如果一种需求包含在一些原料构成的多边形中,他就是可以被混合出来的,题目就变成了用最少的原料点构成的多边形去覆盖所有需求
选出来的点构成的显然是一个凸多边形啊,我们就可以吧那些满足所有需求都在他左/右边的两点连线,然后\(floyd\)做最小环就好了
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1e3+100;
struct Point{
double x,y;
Point(double xx=0,double yy=0){
x=xx,y=yy;
}
}a[maxn],b[maxn];
struct Vector{
double x,y;
Vector(double xx=0,double yy=0){
x=xx,y=yy;
}
};
int dcmp(double x){return fabs(x)<1e-9?0:(x>0?1:-1);}
Vector operator - (Point a,Point b){return Vector(a.x-b.x,a.y-b.y);}
double operator * (Vector a,Vector b){return a.x*b.y-a.y*b.x;}
double len(Vector a){return sqrt(a.x*a.x+a.y*a.y);}
int n,m,f[maxn][maxn];
double sb;
void getdist(){
memset(f,0x3f,sizeof(f));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j){
int ok=1;
for(int k=1;k<=m;k++)
if(dcmp((a[j]-a[i])*(b[k]-a[i]))<0){
ok=0;
break;
}
if(ok) f[i][j]=1;
}
}
void floyd(){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
if(f[j][k]>f[j][i]+f[i][k])
f[j][k]=f[j][i]+f[i][k];
int ans=0x3f3f3f3f;
for(int i=1;i<=n;i++)
ans=min(ans,f[i][i]);
if(ans==0x3f3f3f3f) printf("-1\n");
else{
if(ans==2){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j){
bool ok=1;
for(int k=1;k<=m;k++){
Vector v1=a[j]-a[i],v2=b[k]-a[i];
double x=len(v1),y=len(v2),z=dcmp(v2.x*v1.x);
if(y!=0&&(z<0||y>x)){
ok=0;
break;
}
}
if(ok==1){
printf("2\n");
return;
}
}
printf("-1\n");
}
else printf("%d\n",ans);
}
}
bool tp(){
for(int i=1;i<m;i++)
if(dcmp(b[i].x-b[i+1].x)!=0||dcmp(b[i].y-b[i+1].y)!=0)
return 0;
for(int i=1;i<=n;i++)
if(dcmp(a[i].x-b[1].x)==0&&dcmp(a[i].y-b[1].y)==0){
printf("1\n");
return 1;
}
return 0;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%lf%lf%lf",&a[i].x,&a[i].y,&sb);
for(int i=1;i<=m;i++)
scanf("%lf%lf%lf",&b[i].x,&b[i].y,&sb);
if(tp()) return 0;
getdist();
floyd();
return 0;
}
Luogu-4049 [JSOI2007]合金的更多相关文章
- bzoj1027 [JSOI2007]合金
1027: [JSOI2007]合金 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 2671 Solved: 703[Submit][Status][ ...
- bzoj 1027 [JSOI2007]合金(计算几何+floyd最小环)
1027: [JSOI2007]合金 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 2970 Solved: 787[Submit][Status][ ...
- BZOJ 1027 [JSOI2007]合金
1027: [JSOI2007]合金 Time Limit: 4 Sec Memory Limit: 162 MBSubmit: 2605 Solved: 692[Submit][Status][ ...
- bzoj千题计划123:bzoj1027: [JSOI2007]合金
http://www.lydsy.com/JudgeOnline/problem.php?id=1027 因为x+y+z=1,所以z=1-x-y 第三维可以忽略 将x,y 看做 平面上的点 简化问题: ...
- [bzoj 1027][JSOI2007]合金(解析几何+最小环)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1027 分析: 首先因为一个合金的和为1,所以考虑2个材料合金能否合成一个需求合金的时候 ...
- 1027: [JSOI2007]合金 - BZOJ
Description 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的原材料中铁铝锡的比重不同.然后,将每种原材料取出一定量,经过融解.混合,得到新的 ...
- [JSOI2007]合金
Description 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的 原材料中铁铝锡的比重不同.然后,将每种原材料取出一定量,经过融解.混合,得到新 ...
- BZOJ1027 [JSOI2007]合金 【计算几何 + floyd】
题目 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的 原材料中铁铝锡的比重不同.然后,将每种原材料取出一定量,经过融解.混合,得到新的合金.新的合金的 ...
- P4049 [JSOI2007]合金
传送门 我数学可能白学了-- 因为三个数加起来等于\(1\),那么只要用前两个数就能表示,那么就能把每一种金属看成一个二维向量.考虑只有两个向量的时候,设这两个向量为\(a,b\),那么一个向量\(c ...
- BZOJ 1027 JSOI2007 合金 计算几何+Floyd
题目大意:给定一些合金,选择最少的合金,使这些合金能够按比例合成要求的合金 首先这题的想法特别奇异 看这题干怎么会想到计算几何 并且计算几何又怎么会跟Floyd挂边 好强大 首先因为a+b+c=1 所 ...
随机推荐
- unity4.6 Beta版 UI控件之Button
近期需求,须要用到4.6版本号uGui了,所以抽时间来学习学习,就UI控件在Unity工具里创建预设这块来说相比較于NGUI,我认为是没有什么太大的差别的. 比方:Canvas--Camera . T ...
- Paxos 学习总结
近期学习了分布式领域的重要算法Paxos,这里罗列下关键点当作总结.自己水平有限,难免存在谬误,恳请读者指正.本篇不包含Paxos的基本理论介绍.Paxos基础能够參考以下的学习资料章节. 1 Pax ...
- mysql中去重复记录
Distinct 这个只能放在查询语句的最前面 参考 : https://www.cnblogs.com/lushilin/p/6187743.html
- Hibernate学习之类级别注解
© 版权声明:本文为博主原创文章,转载请注明出处 类级别注解: 1. @Entity 实体:表示映射实体类,使用@Entity时必须指定实体类的主键属性 @Entity(name="&quo ...
- Babel中的stage-0,stage-1,stage-2以及stage-3
大家知道,将ES6代码编译为ES5时,我们常用到Babel这个编译工具.大家参考一些网上的文章或者官方文档,里面常会建议大家在.babelrc中输入如下代码: { "presets" ...
- NHibernate二级缓存(第十一篇)
NHibernate二级缓存(第十一篇) 一.NHibernate二级缓存简介 NHibernate由ISessionFactory创建,可以被所有的ISession共享. 注意NHibernate查 ...
- IE下object元素遮挡div表单
目前遇到这样的一个问题: 我用ActiveX插件做了一个C#的播放器,要将这个插件放到web浏览器中,然后可以通过前台页面来控制视频的播放,暂停还有回放,这个时候发现object的onclick事件无 ...
- 通俗的解释下音视频同步里pcr作用
PCR同步在非硬件精确时钟源的情况还是谨慎使用,gstreamer里面采用PCR同步,但是发现好多ffmpeg转的片儿,或者是CP方的片源,pcr打得很粗糙的,老是有跳帧等现象.音视频同步,有三种方法 ...
- Xampp 环境问题集合
1.不小心把虚拟机的环境删了,需要重新安装xmapp 安装很简单,但是重启:/opt/lampp/lampp restart 发现 XAMPP:"Another web server dae ...
- StartUML
原著:Stephen Wong 翻译:火猴 http://blog.csdn.net/monkey_d_meng/article/details/5995610 Sta ...