題目
UVa1587
題目意思大致為每次輸入六個矩形的長和寬绑莺,然后這六個矩形能否構(gòu)成一個長方體(或正方體)
解讀
如果一組數(shù)據(jù)能構(gòu)成長方體嗜闻,則這六個面符合規(guī)則:
a b
a b
a c
a c
b c
b c
其中a<=b<=c
所以把輸入的數(shù)據(jù)進行排序之后很容易就能進行判斷盲再,即一二組,三四組螺男,五六組分別相等繁莹,且一三組的x相同,三五組的y相同,一組的y與五組的x相同蓖柔。
代碼
#include <stdio.h>
struct pallet {
int x; int y;
}pallets[6];
void swap(int *a, int *b) {
int t = *a; *a = *b; *b = t;
};
void sort() {
for (int i = 5; i >= 0; i--) {
for (int j = 0; j < i; j++) {
if (pallets[j].x > pallets[j + 1].x) {
swap(&pallets[j].x, &pallets[j + 1].x); swap(&pallets[j].y, &pallets[j+1].y);
}
else if (pallets[j].x == pallets[j + 1].x && pallets[j].y > pallets[j + 1].y) {
swap(&pallets[j].x, &pallets[j + 1].x); swap(&pallets[j].y, &pallets[j + 1].y);
}
}
}
}
int check() {
if (pallets[0].x == pallets[1].x && pallets[0].y == pallets[1].y &&
pallets[2].x == pallets[3].x && pallets[2].y == pallets[3].y &&
pallets[4].x == pallets[5].x && pallets[4].y == pallets[5].y &&
pallets[0].x == pallets[2].x && pallets[2].y == pallets[4].y &&
pallets[0].y == pallets[4].x)
return 1;
return 0;
}
int main() {
while (scanf("%d%d", &pallets[0].x, &pallets[0].y) == 2) {
if (pallets[0].x > pallets[0].y)
swap(&pallets[0].x, &pallets[0].y);
for (int i = 1; i < 6; i++) {
scanf("%d%d", &pallets[i].x, &pallets[i].y);
if (pallets[i].x > pallets[i].y)
swap(&pallets[i].x, &pallets[i].y);
}
sort();
if (check())
printf("POSSIBLE\n");
else
printf("IMPOSSIBLE\n");
}
return 0;
}