#include<iostream> #include<vector> using namespace std; typedef struct { int w, h; int count; }Paper; void addPaper(vector<Paper>& data, int w, int h) { for (int i = 0; i < data.size(); i++) { if ((data[i].w == w && data[i].h == h )|| (data[i].w == h && data[i].h == w)) { if (data[i].count < 2) { //【坑】小心正方形的情况 data[i].count++; return; //添加成功 } } } //未找到,说明是第一次添加 Paper paper; paper.h = h; paper.w = w; paper.count = 1; data.push_back(paper); return; } int judge(vector<Paper>& data) { int a, b, c; //长,宽,高 int t; a = data[0].h; //不妨设第0块板的长为长方体的长 b = data[0].w; //第0块板的宽为长方体的宽 if (data[1].h == a) { //第1块板的一边与第0块板的一边重合 c = data[1].w; //第1块板的另一边必为长方体的高,与第2块板的一边重合 t = b; //第0块板的另一边必与第2块板的一边重合 } else if (data[1].w == a) { c = data[1].h; t = b; } else if (data[1].h == b) { c = data[1].w; t = a; } else if (data[1].w == b) { c = data[1].h; t = a; } else return 0; //第2块板,其中一边必是c,另一边是t if (data[2].h == c && data[2].w == t) return 1; else if (data[2].h == t && data[2].w == c) return 1; else return 0; } int main() { int w, h; while (cin >> w >> h) { vector<Paper> data; addPaper(data, w, h); for (int i = 0; i < 5; i++) { cin >> w >> h; addPaper(data, w, h); } //板输入完毕,初步先来判断是否能组成小盒子 if (data.size() != 3) //没有三种规格的板 cout << "IMPOSSIBLE" << endl; else { //下面再判断三边长能不能组成 if (judge(data)) cout << "POSSIBLE" << endl; else cout << "IMPOSSIBLE" << endl; } } return 0; } |
Double click to view unformatted code.