2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛 C 颜料的混合 (计算几何)

题意:感觉题目描述不清楚。。。也许是自己菜把。。题意是给你是3种颜料,他们都有一个红度和一个绿度,红度和绿度相同就表明他们的颜色相同,现在他现在给你一个新的颜色,问你能不能由这三个颜色组成。

思路 :我们把两个颜色抽象成一个线段的两个端点,那么显然我们这个线段上的所有颜色我们都能由这两个颜色组成,那么给你三个颜色,我们就能想到是一个三角形,也就是说新的颜色只要在三角形内,我们都能组成就ok了,如何判断一个点在不在三角形内呢,做法就是将这个点和三角形的三个顶点都连起来,看看他们组成的面积和三角形面积比较,如果相等的话,那么我们的点就在三角形内部

#include <bits/stdc++.h>

using namespace std;

struct point
{
    int x, y;
    void input() {
        scanf("%d %d", &x, &y);
    }
    point() {}
    point(int x, int y) : x(x), y(y){}
    point operator + (const point & z) const {
        return point(x+z.x, y+z.y);
    }
    point operator - (const point & z) const {
        return point(x-z.x, y-z.y);
    }
    int operator ^ (const point & z) const {
        return x * z.y - y * z.x;
    }
}p[4];
struct triangle
{
    point a,b,c;
    triangle() {}
    triangle(point a,point b,point c):a(a),b(b),c(c){}
    int area() {
        return abs( (b-a) ^ (c-a) );
    }
};

int main()
{
    while(~scanf("%d %d", &p[0].x, &p[0].y)) {
        for(int i = 1;i <= 3;i ++) p[i].input();
        triangle abc(p[1], p[2], p[3]);
        triangle abp(p[1], p[2], p[0]);
        triangle acp(p[1], p[3], p[0]);
        triangle bcp(p[2], p[3], p[0]);
//        printf("%d %d %d %d\n", abc.area(), abp.area(), acp.area(), bcp.area());
        if(abc.area() == abp.area() + acp.area() + bcp.area()) puts("Yes");
        else puts("No");
    }
    return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值