题解就看这位仁兄的吧…不过代码还是别看他的了…

同样的方法…我200ms,他2000ms.

常数的幽怨…

CODE

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 505;
const double eps = 1e-8;
struct Point {
double x, y;
Point(){}
Point(double x, double y):x(x), y(y){}
inline Point operator -(const Point &o)const { return Point(x-o.x, y-o.y); }
inline double operator *(const Point &o)const { return x*o.y - y*o.x; }
}a[MAXN], b[MAXN];
struct Line {
Point p, v;
Line(){}
Line(const Point &p, const Point &v):p(p), v(v){}
};
inline bool On_Right(const Line &l, const Point &p) {
return (p - l.p) * l.v > eps;
}
inline int dcmp(const double &x) {
return x < -eps ? -1 : x < eps ? 0 : 1;
}
int m, n, f[MAXN][MAXN];
int main () {
scanf("%d%d", &m, &n); double o;
for(int i = 1; i <= m; ++i) scanf("%lf%lf%lf", &a[i].x, &a[i].y, &o);
for(int i = 1; i <= n; ++i) scanf("%lf%lf%lf", &b[i].x, &b[i].y, &o);
for(int i = 1; i <= m; ++i) {
for(int j = 1; j <= m; ++j)
f[i][j] = m+1;
bool flg = 1;
for(int j = 1; j <= n && flg; ++j)
if(dcmp(b[j].x-a[i].x) || dcmp(b[j].y-a[i].y)) flg = 0;
if(flg) return puts("1"), 0;
}
for(int i = 1; i <= m; ++i)
for(int j = 1; j <= m; ++j)
if(i != j && !(a[i].x == a[j].x && a[i].y == a[j].y)) { //i->j
Line tmp = Line(a[i], a[j] - a[i]);
bool flg = 1;
for(int k = 1; k <= n && flg; ++k)
if(On_Right(tmp, b[k])) flg = 0;
if(flg) {
for(int k = 1; k <= n && flg; ++k)
if
(
(!dcmp((b[k] - tmp.p) * tmp.v))
&&
((b[k].x < a[i].x && b[k].x < a[j].x)
|| (b[k].x > a[i].x && b[k].x > a[j].x)
|| (b[k].y < a[i].y && b[k].y < a[j].y)
|| (b[k].y > a[i].y && b[k].y > a[j].y)
)
) flg = 0;
if(flg) f[i][j] = 1;
}
}
for(int k = 1; k <= m; ++k)
for(int i = 1; i <= m; ++i) if(f[i][k] <= m)
for(int j = 1; j <= m; ++j) if(f[k][j]+f[i][k] <= m)
f[i][j] = min(f[i][j], f[i][k] + f[k][j]);
int ans = m+1;
for(int i = 1; i <= m; ans = min(ans, f[i][i]), ++i);
printf("%d\n", ans > m ? -1 : ans);
}

BZOJ 1027: [JSOI2007]合金 (计算几何+Floyd求最小环)的更多相关文章

  1. BZOJ 1027 JSOI2007 合金 计算几何+Floyd

    题目大意:给定一些合金,选择最少的合金,使这些合金能够按比例合成要求的合金 首先这题的想法特别奇异 看这题干怎么会想到计算几何 并且计算几何又怎么会跟Floyd挂边 好强大 首先因为a+b+c=1 所 ...

  2. 【BZOJ 1027】 (凸包+floyd求最小环)

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

  3. BZOJ 1027 [JSOI2007]合金 ——计算几何

    我们可以把每一种金属拆成一个二维向量,显然第三维可以计算出来,是无关的. 我们只需要考虑前两维的情况,显然可以构成点集所形成的凸包内. 然后我们枚举两两的情况,然后可以发现如果所有的点都在一侧是可以选 ...

  4. bzoj 1027 [JSOI2007]合金(计算几何+floyd最小环)

    1027: [JSOI2007]合金 Time Limit: 4 Sec  Memory Limit: 162 MBSubmit: 2970  Solved: 787[Submit][Status][ ...

  5. BZOJ_1027_[JSOI2007]_合金_(计算几何+Floyd求最小环)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1027 共三种金属,\(m\)种材料,给出每种材料中三种金属的占比. 给出\(n\)种合金的三种 ...

  6. bzoj 1027: [JSOI2007]合金【凸包+Floyd】

    参考:https://www.cnblogs.com/zhuohan123/p/3237246.html 因为一c可以由1-a-b得出,所以删掉c,把a,b抽象成二维平面上的点.首先考虑一个客户需求能 ...

  7. BZOJ 1027 [JSOI2007]合金

    1027: [JSOI2007]合金 Time Limit: 4 Sec  Memory Limit: 162 MBSubmit: 2605  Solved: 692[Submit][Status][ ...

  8. [bzoj 1027][JSOI2007]合金(解析几何+最小环)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1027 分析: 首先因为一个合金的和为1,所以考虑2个材料合金能否合成一个需求合金的时候 ...

  9. 1027: [JSOI2007]合金 - BZOJ

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

随机推荐

  1. UWP笔记-边框背景虚化效果

    这是一个简单的UI外观 1.添加Negut包: Microsoft.Toolkit.Uwp.UI.Controls 2.xaml:命名空间中引用 xmlns:controls="using: ...

  2. 【转帖】sysbench使用教程(包含ubuntu自带的0.4版本、0.5版本和最新的1.0版本)

    sysbench使用教程(包含ubuntu自带的0.4版本.0.5版本和最新的1.0版本) 2018年08月10日 09:54:42 cxin917 阅读数 429   版权声明:本文为博主原创文章, ...

  3. SQL SERVER创建表

    创建表 create table table_name ( column_name_1 data_type, column_name_2 data_type NOT NULL, column_name ...

  4. HTTP用户认证、追加协议以及相关技术简单学习

    1. 用户身份认证 BASIC认证(基本认证): DIGEST(摘要认证): SSL客户端认证: FormBase认证(表单认证)常用: session和cookie 2. 基于HTTP的追加协议 A ...

  5. 第十四章 ZYNQ TIMER定时器中断

      上篇文章实现了了PS接受来自PL的中断,本片文章将在ZYNQ的纯PS里实现私有定时器中断.每隔一秒中断一次,在中断函数里计数加1,通过串口打印输出. 本文所使用的开发板是Miz702 PC 开发环 ...

  6. GAN——ModeCollapse

    GAN——ModeCollapse 2017年05月21日 13:54:31 LiuSpark 阅读数 6821更多 分类专栏: 机器学习   版权声明:本文为博主原创文章,遵循CC 4.0 BY-S ...

  7. Inno Setup CreateProcess 失败:代码 740(Inno Setup打包的程序提升为管理员权限)

    原文参考 https://www.cnblogs.com/SnailProgramer/p/4243666.html http://blog.csdn.net/x356982611/article/d ...

  8. Android应用市场App发布

    来自知乎 Android应用市场App发布说到官方渠道,不得不说一些主要的大市场了,如:360.小米.应用宝.91.安卓.百度.豌豆荚.安智.现在我来一一说它们的一些简单特点. 1,360 (1)当天 ...

  9. Ubuntu/centos/redhat/SUSE sipp安装(带rtp支持,3.5.1版本)

    1.ubuntu 12.04 apt-get install ncurses-dev apt-get install libpcap-dev ./configure --with-pcap make ...

  10. window上mongoDB的安装及常用mongodb命令

    前几天在学习node操作数据库时使用的mongoDB数据库,今天来对mongodb的安装过程及配置以及后面需要使用的一些常用命令做一下总结. 安装MongoDB (可参考菜鸟教程中的安装步骤) 首先, ...