S失败者的典型-UVA1587


zj说,我们一起做一道题吧!
我说好啊!
十分钟之后..
"wa x1"
我打了个框架...
五分钟后
"wa x2"
zj打游戏去了.....
半个小时之后我终于样例过了...
我"你正方形考虑了吗"
zj:"啊!天呢"
然后zj就ac了
然后我五个小时之后还在wa...
我..






样例试了试都差不多我还是放弃吧emmmm= =
ac的代码到处都有....
我写一下经验教训吧


1.可以用set,但是这个自动是不重复的排序好了的集合
所以要重载比较
****结构体中的比较
bool friend operator<(node x,node y)
{if(x.x1>y.x2)return true;
if(x.x1==y.x1&&x.x2>y.x2)return true;


return false;
}
2.使用set要清空 
用clear()..不然呢?
就像每次用的flag药放到循环里面一样啊
3.参考前面那几个题,不用开大数组存起来,而且数据只用一次(类似)所以直接每6round开一个循环就好了,我很暴力的一次读入6个
4.要特判正方形的1情况
5.4 1 1 现象,开始用的无序的set是不行的
用multiset返回count可以解决
写法是s1.count(node[i]);
6. 1 1 2 2 3 3 现象特判 了
7.我是边数和..  两个框的,所以比了2次
结构体里面,是每个都等于2才可以
边数里面,每个都是4才可以

8.之前想因为不好表示的话,只要首个和尾数




#include<iostream>
#include<set>
#include<map> 
using namespace std;


struct node{
	int x1;
	int x2;
	//int count;
	bool friend operator<(node x, node y)
	{
		if (x.x1<y.x1) return true;
		if (x.x1 == y.x1&&x.x2<y.x2) return true;
		//		if(x.x1 == y.x1&&x.x2=y.x2&&x.count<y.count) return true;


		return false;
	}






}node1[6];






//用set存一下,所以无序的最后size==3; 
//  然后比较一下1 2 3 
int main()
{


	multiset<node>s1;
	multiset<int>s2;


	


	while (cin >> node1[0].x1 >> node1[0].x2 >> node1[1].x1 >> node1[1].x2 >> node1[2].x1 >> node1[2].x2 >> node1[3].x1 >> node1[3].x2 >> node1[4].x1 >> node1[4].x2 >> node1[5].x1 >> node1[5].x2){
		s1.clear();
		s2.clear();
		
		bool flag = true;
		for (int i = 0; i < 6; i++)
		{




			if (node1[i].x1>node1[i].x2)
			{
				int temp;
				temp = node1[i].x1;
				node1[i].x1 = node1[i].x2;
				node1[i].x2 = temp;
			}// to make sure  small to big


		
			s1.insert(node1[i]);


			s2.insert(node1[i].x1);
			s2.insert(node1[i].x2);
		}
		///  2 2 2 可以  3 3 
		if (s1.count(node1[0]) == 6 && s2.count(node1[0].x1) == 12)
			flag = true;
		else if (node1[0].x1 == node1[0].x2)
			flag = false;
		else	if (s1.count(node1[0]) != 2||s1.count(node1[3])!=2|| s1.count(node1[5]) != 2)
			flag = false;




		//的确不行啊= = 3个的话真的差得很多
		//	else if()
		//flag=true;
		//  怎么确定是三个边呢? 6 个数如何确定两两相同?
		else if (s2.count(node1[0].x1) != 4 || s2.count(node1[0].x2) != 4||s2.count(node1[1].x1) != 4 || s2.count(node1[1].x2) != 4||s2.count(node1[2].x1) != 4 || s2.count(node1[2].x2) != 4||s2.count(node1[3].x1) != 4 || s2.count(node1[3].x2) != 4||s2.count(node1[4].x1) != 4 || s2.count(node1[4].x2) != 4||s2.count(node1[5].x1) != 4 || s2.count(node1[5].x2) != 4)
			flag = false;

		if (!flag)
			cout << "IMPOSSIBLE" << endl;
		else
		cout << "POSSIBLE" << endl;
	}
	return 0;
}

//其实晚上看了看.. 对于 1 2 1 2 1 1 1 1 1 1 1 1 这组,就没法判断了....

所以说还是啊...正向考虑就可以了,拔毛..  拔不干净....

不是主流诶....  并且大家都没和你这么写,,,,

1.每个面都能找到他的对面

2.每条边都能重叠

其实就可以了

唉  思考问题的角度啊

溜了溜了 等有空登qq补一下zj的图




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值