Box UVA - 1587(Emmm···)

孤者浪人 提交于 2020-02-17 19:58:17

题目:

给出6个矩形及他们的长和宽,判断可否用他们拼出一个长方体(Box) 题目点这里

怎么说呢,这道题确实卡了我很久,但说难吧确实不是太难,说不难吧…反正一屏WA给跪了…

思路:

我简单对比了一下,下面的方法比较好理解也比较好实现的:

  1. 首先判断6×2 = 12 条边总共有几种(即去重)
  2. 仅1种则为正方体,ok
  3. 若2种则我们的理想为有一对面为正方形的长方体
  4. 若3种则每种在4个面出现4次(3×4 == 12)

奉AC代码:

//#include "stdafx.h"
#include <iostream>
using namespace std;

int main() {
	
	int a[6][2];
	int i, j, u;
	int z;//正方形数量 max(6)
	while (cin>>a[0][0]>>a[0][1]) {

		if (a[0][0] == a[0][1]) z = 1; else z = 0;
		for (i = 1; i < 6; i++) {
			cin >> a[i][0] >> a[i][1];
			if (a[i][0] == a[i][1]) z++;
		}

		int ks = 0, k[12] = {0};//不等长边数max(12)  及长度
		for (i = 0; i < 6; i++)
			for (j = 0; j < 2; j++) {
				for (u = 0; u < ks;u++) if (a[i][j] == k[u]) break;
				if (u == ks) { k[ks++] = a[i][j]; }
			}

		bool ok = false;
		if (ks == 1) ok = true;//正方体
		if (ks == 2 && z == 2) ok = true;
		if (ks == 3) {
			for (u = 0; u < 3; u++) {
				int t = 0;
				for (i = 0; i < 6; i++)
					if (k[u] == a[i][0] || k[u] == a[i][1]) t++;
				if (t != 4) break;
			}
			if (u == 3) ok = true;
		}
		cout << (ok ? "" : "IM") << "POSSIBLE\n";
	}
	return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!