【习题 3-10 UVA - 1587】Box
【链接】 我是链接,点我呀:)
【题意】
【题解】
枚举某个顶角的三个相邻面就好。 看看这三个相邻面有没有对应的面。 以及3个相邻面的6个边。 能否分成2个a,2个b,2个c 也即每个数字出现的次数都是偶数。 (因为a,b,c不一定要不一样);【代码】
#include <bits/stdc++.h>
using namespace std;
vector<pair <int, int> > v;
map <int, int> bo;
bool ok = false;
int main() {
#ifdef LOCAL_DEFINE
freopen("F:\\c++source\\rush_in.txt", "r", stdin);
#endif
v.resize(6);
while (~scanf("%d%d", &v[0].first, &v[0].second)) {
bo.clear();
for (int i = 1; i < 6; i++)
scanf("%d%d", &v[i].first, &v[i].second);
for (int i = 0; i < 6; i++)
if (v[i].first>v[i].second)
swap(v[i].first, v[i].second);
sort(v.begin(), v.end());
ok = true;
for (int i = 0; i < 5; i += 2) {
if (v[i].first != v[i + 1].first || v[i].second != v[i + 1].second) {
ok = false;
}
else {
bo[v[i].first]++;
bo[v[i].second]++;
}
}
for (pair <int, int> temp : bo) {
if (temp.second&1) {
ok = false;
}
}
if (ok) {
puts("POSSIBLE");
}
else {
puts("IMPOSSIBLE");
}
}
return 0;
}