uva 1587

题目:给定6对整数,分别代表一个矩形的边长,判断是否能构成一个长方体。
思路:看似简单,但要找对方法,否则还是很麻烦的。输入的12个数,没有什么规律可言,为了判断方便,可以先进行标准化处理。
关键是数的关系,所以可以创建一个square结构体,包含两个成员变量 a,b ,分别代表矩形的较短边和较长边,这样,就变成了6个矩形,然后对矩形进行排序,如何定义大小关系呢?先比较短边,再比较长边。
代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct square{
        int a,b;
        square(int xa=0,int xb=0){
            if(xa<xb){a=xa;b=xb;}
            else{a=xb;b=xa;}
        }
        bool operator==(const square &sb) const{
            return (a==sb.a&&b==sb.b);
        }
        bool operator < (const square &sb)const {
            return a==sb.a?b<sb.b:a<sb.a;
        }
} s[6];

int reads(){
        int a,b;
        for(int i=0;i<6;++i){
                if(scanf("%d%d",&a,&b)!=2) return 0;
                s[i]=square(a,b);
        }
        return 1;
}

bool check(){
    sort(s,s+6);
    for(int i=0;i<6;i+=2) if(!(s[i]==s[i+1])) return 0;
    return(s[0].a==s[2].a&&s[0].b==s[4].a&&s[2].b==s[4].b);
}
int main(){
   while(reads()){

        printf("%s\n",check()?"POSSIBLE":"IMPOSSIBLE");
   }
    return 0;
}

疑惑:

  1. 重载运算符的函数必须声明为const,虽然我到现在也没搞明白是为什么
  2. 构造函数不是没有返回值吗,那么 s[i]=square(a,b);为什么是对的呢?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章