【习题 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;
}
posted @ 2017-11-10 18:57  AWCXV  阅读(113)  评论(0编辑  收藏  举报