【bzoj1027】合金

分析

数形结合+计算几何+Floyd最小环。

http://blog.csdn.net/popoqqq/article/details/40539273

虽然这样占大家的很不好,但是我的确需要这么做。

小结

(1)最小环的写法

(2)凸包的一种简易算法

RT。

(3)关于计算几何的练习

通过做这道题,计算几何的模板也熟悉了一些。

计算几何如何调试?

这个么...好像只能瞪眼法了。

代码

#include <cstdio>
#include <climits>
#include <cmath>
#include <algorithm>
using namespace std;

#define rep(i,a,b) for (int i=(a);i<=(b);i++)

const int M=512;
const int N=512;
const int MAX=INT_MAX>>1;
const double EPS=1e-15;

int cmp(double x);

int m,n;
struct point
{
    double x,y;
    point(double _x=0,double _y=0) {
        x=_x,y=_y;
    }
    friend point operator - (point a,point b) {
        return point(a.x-b.x,a.y-b.y);
    }
    friend point operator * (point a,point b) {
        return point(a.x*b.x,a.y*b.y);
    }
    friend int operator == (point a,point b) {
        return !cmp(a.x-b.x)&&!cmp(a.y-b.y);
    }
    friend int operator != (point a,point b) {
        return !(a==b);
    }
}mer[M],prd[N];

int f[M][M];
int res;

void Init(void) {
    scanf("%d%d",&m,&n);
    rep(i,1,m) {
        double x,y; scanf("%lf%lf%*lf",&x,&y);
        mer[i]=point(x,y);
    }
    rep(i,1,n) {
        double x,y; scanf("%lf%lf%*lf",&x,&y);
        prd[i]=point(x,y);
    }
}

int cmp(double x)
{
    if(fabs(x)<EPS)  return 0;
    return x>0?1:-1;
}

double det(point a,point b) {
    return a.x*b.y-a.y*b.x;
}

int Left(point k,point a,point b) {
    double t=det(b-a,k-a);
    return t>0;
}
int On(point k,point a,point b) {
    if (cmp(det(k-a,b-a))!=0) return 0;
    if (!(cmp(min(a.x,b.x)-k.x)<=0&&cmp(k.x-max(a.x,b.x))<=0)) return 0;
    if (!(cmp(min(a.y,b.y)-k.y)<=0&&cmp(k.y-max(a.y,b.y))<=0)) return 0;
    return 1;
}

/*
bool On(const point &a,const point &b,const point &c) {
    return !cmp(det(a-b,c-b))&&cmp((a.x-b.x)*(a.x-c.x))<=0&&cmp((a.y-b.y)*(a.y-c.y))<=0;
}
*/

int Check(point a,point b) {
    rep(i,1,n) {
        int t1=Left(prd[i],a,b);
        int t2=On(prd[i],a,b);
        if (!t1&&!t2) return 0;
    }
    return 1;
}

void MakeGraph(void) {
    rep(i,1,m) rep(j,1,m) f[i][j]=MAX;
    rep(i,1,m) rep(j,1,m)
        if (Check(mer[i],mer[j]))
            f[i][j]=1;
}

int Floyd(void) {
    rep(i,1,m) {
        int mrk=1;
        rep(j,1,n) if (mer[i]!=prd[j]) {
            mrk=0;
            break;
        }
        if (mrk) return 1;
    }

    rep(i,1,m) rep(j,1,m) {
        int mrk=1;
        rep(k,1,n)
            if (!On(prd[k],mer[i],mer[j])) {
                mrk=0;
                break;
            }
        if (mrk) return 2;
    }

    /*
    rep(i,1,m) {
        rep(j,1,m)
            if (f[i][j]!=MAX)
                printf("%d ",f[i][j]);
            else printf("0 ");
        printf("\n");
    }
    */

    int ans=MAX;
    rep(k,1,m) rep(i,1,m) rep(j,1,m)
        f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
    rep(i,1,m) ans=min(ans,f[i][i]);
    return ans!=MAX?ans:-1;
}

int main(void) {
    #ifndef ONLINE_JUDGE
    freopen("bzoj1027.in","r",stdin);
    freopen("bzoj1027.out","w",stdout);
    #endif

    Init();
    MakeGraph();

    res=Floyd();
    printf("%d\n",res);

    return 0;
}

【bzoj1027】合金的更多相关文章

  1. bzoj1027【JSOI2007】合金

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

  2. bzoj1027 [JSOI2007]合金

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

  3. bzoj千题计划123:bzoj1027: [JSOI2007]合金

    http://www.lydsy.com/JudgeOnline/problem.php?id=1027 因为x+y+z=1,所以z=1-x-y 第三维可以忽略 将x,y 看做 平面上的点 简化问题: ...

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

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

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

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

  6. 合金装备V 幻痛 制作技术特辑

    合金装备V:幻痛 制作特辑 资料原文出自日版CGWORLD2015年10月号   在[合金装备4(Metal Gear Solid IV)]7年后,序章作品[合金装备5 :原爆点 (Metal Gea ...

  7. 【BZOJ】【1027】【JSOI2007】合金

    计算几何/凸包/Floyd Orz rausen大爷太强辣 计算几何题目果然不会做>_> 这个题……虽然他给了3个坐标,但实际上是个二维的计算几何题= =因为第三维坐标可以直接用前两维坐标 ...

  8. 1027: [JSOI2007]合金 - BZOJ

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

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

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

随机推荐

  1. [webkit移动开发笔记]之如何去除android上a标签产生的边框

    去年年底,做完最后一个项目就可以开开心心回家,可是在测试阶段,发现了不少bug,为了不影响回家时间,加班加点也要解决这些问题,这里算是工作回忆,也算是工作的一点小总结. 在ios4+和android2 ...

  2. 使用StarUML创建类图

    使用StarUML创建类图 http://www.flyne.org/article/379 1.综述(What) StarUML是一种生成类图和其他类型的UML图表的工具.本文是一个使用StarUM ...

  3. 中型企业的IT运维策略

    如何建设一支能够解决问题.创造价值.有活力的.不断进取的IT运维团队,并带领这支团队?充分发挥这个团队的优势力量,是运维业务有效开展的关 键.运维策略是直接体现运维业务的经济价值所在.好的运维措施.方 ...

  4. 2016年2月18日 JAVA基础

    运行JAVA之前,必须将系统环境变量进行配置. 如果是32位的计算机安装的JDK版本必须是32位的,如果是64位的计算机安装的JDK版本必须是64位的,两者不可忽视,以免程序无法正常启动. 具体更改方 ...

  5. [SAP ABAP开发技术总结]程序自己以JOB方式运行

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  6. [SAP ABAP开发技术总结]ALV

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  7. 使用escape编码地址栏中的中文字符

    在通过地址栏传递参数的时候,有时候会遇到中文参数,在获取这种中文参数值得时候, 往往会出现乱码, 解决办法如下: 在传递参数的使用 escape 函数进行编码,获取的时候再进行解码即可. 例如: va ...

  8. git bash下的选择、复制、粘贴

      1. 打开git bash     2.点击左上角,选择属性,打钩     3.回到界面,选择一行文字,然后点击 “右键”,这样就复制到剪切板了.再点 “右键”,可以粘贴到命令窗口中了.    

  9. 问题: unrecognized selector sent to class 0x10affab20

    今天遇到了一个问题, 害我足足找了半个小时 问题: 明明可以跳进 方法 的实现里面, 但是程序运行的时候, 就是报错: 发送一个未识别消息, 而且程序直接跳出, 停止执行 原因: 项目的编译文件列表里 ...

  10. Zeller公式推导及C#代码示例(待完善)

    Zeller公式用于计算给定日期是星期几. 该方法可以用数论知识进行证明. 假设给定日期Date为Year-Month-Day,求解该日期是星期几的问题实际上就是以之前某个确定星期几的日期作为参考点, ...