0005 UVA1587 Box

UVA1587 Box

问题描述

在这里插入图片描述

在这里插入图片描述

代码&注释

/*
    Dreams never shine!
    It's you that shine while chasing your dreams :)
    JAYO!!
*/
#include <iostream>
#include <vector>
#include <algorithm>
#define _for(i, a, b) for (int i = (a); i < (b); i++) 
#define _rep(i, a, b) for (int i = (a); i <= (b); i++)
using namespace std;

/*
bool operator== (const Point& a, const Point &b) { return a.x == b.x && a.y == b.y; }
bool operator!= (const Point& a, const Point &b) { return !(a == b); }
bool operator< (const Point& p1, const Point& p2) { return p1.x < p2.x || (p1.x == p2.x && p1.y < p2.y); }
istream& operator>>(istream& is, Point& p) { return is>>p.x>>p.y; }
ostream& operator<<(ostream& os, const Point& p) { return os<<"["<<p.x<<","<<p.y<<"]"; }
template<typename T>
ostream& operator<<(ostream& os, const vector<T>& v) {
    for(int i = 0; i < v.size(); i++)
        os<<v[i]<<" ";
    return os;
}
*/
struct Point {
    int x, y;
    Point(int x = 0, int y = 0) : x(x), y(y) {}
};
bool operator == (const Point& a, const Point& b) { return a.x == b.x && a.y == b.y; }
bool operator != (const Point& a, const Point& b) {
    // return a.x != b.x || a.y != b.y;
    return !(a == b); }
bool operator < (const Point& p1, const Point& p2) { return p1.x < p2.x || (p1.x == p2.x && p1.y  < p2.y);  }
istream& operator >> (istream& is, Point& p) { return is >> p.x >> p.y; }
ostream& operator << (ostream& os, const Point& p) { return os << "[" << p.x << "," << p.y << "]"; }
template<typename T>
ostream& operator << (ostream& os, const vector<T>& v) {
    for (int i = 0; i < v.size(); i++) {
        os << v[i] << " ";
    }
    return os;
}

typedef Point Rect;
vector<Rect> rects;

bool solve() {
    sort(rects.begin(), rects.end());
    // cout << "sorted: " << rects << endl;
/*
    _for(i, 0, 3) if(rects[2*i] != rects[2*i+1]) return false;
    const Rect &r1 = rects[1], &r2 = rects[3], &r3 = rects[5];    
    return r1.x == r2.x && r1.y == r3.x && r2.y == r3.y;
*/
    _for(i, 0, 3) if (rects[2 * i] != rects[2 * i + 1]) return false;
    const Rect& r1 = rects[1], &r2 = rects[3], &r3 = rects[5];
    return r1.x == r2.x && r1.y == r3.x && r2.y == r3.y; // 1 2 2 3 空间中的一个角(以0为出发点,沿x, y, z 轴作射线,得到一个空间角)
}

int main() {
    Rect r;
    while (true) {
        rects.clear();
        _for (i, 0, 6) {
            if (!(cin >> r)) return 0;
            if (r.x > r.y) swap(r.x, r.y); // 从小到大排序(边长)
            rects.push_back(r);
        }

        if (solve()) cout << "POSSIBLE" << endl;
        else cout << "IMPOSSIBLE" << endl;
    }
    return 0;

	return 0;
}



知识点

模板初识

template<typename T>
C++种的模板,
T代表一种类型,实例化的时候才知道的类型
优点在于:比如写一个求和函数,对于intfloat等不同的数据类型,
一般来说需要写多个函数,如int sum(int, int)float sum(float, float);
用template<typename T>的话,
就只需要写一个通用函数就可以了,T就代替了intfloat等数据类型,
具体数据类型到实例化的时候再确定。

优先级

在这里插入图片描述

总结

加油

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值