【hihocoder1255 2015北京赛区G】【简单模拟 简化写法超棒哦】 Mysterious Antiques in Sackler Museum 四个矩形选三个 恰好拼成大矩形

原创 2015年11月17日 19:16:50
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<math.h>
#include<iostream>
#include<string>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<bitset>
#include<algorithm>
#include<time.h>
using namespace std;
void fre(){freopen("c://test//input.in","r",stdin);freopen("c://test//output.out","w",stdout);}
#define MS(x,y) memset(x,y,sizeof(x))
#define MC(x,y) memcpy(x,y,sizeof(x))
#define MP(x,y) make_pair(x,y)
#define ls o<<1
#define rs o<<1|1
typedef long long LL;
typedef unsigned long long UL;
typedef unsigned int UI;
template <class T1,class T2>inline void gmax(T1 &a,T2 b){if(b>a)a=b;}
template <class T1,class T2>inline void gmin(T1 &a,T2 b){if(b<a)a=b;}
const int N=0,M=0,Z=1e9+7,ms63=1061109567;
int casenum,casei;
int a[4][2];
int b[4];
bool check(int x,int y,int z)
{
	for(int i=0;i<2;i++)
	{
		for(int j=0;j<2;j++)
		{
			for(int k=0;k<2;k++)
			{
				if(a[x][i]==a[y][j]&&a[x][i]==a[z][k])return 1;
				if(a[x][i]==a[y][j]+a[z][k]&&a[y][j^1]==a[z][k^1])return 1;
			}
		}
	}
	return 0;
}
int main()
{
	scanf("%d",&casenum);
	for(casei=1;casei<=casenum;casei++)
	{
		for(int i=0;i<4;i++)scanf("%d%d",&a[i][0],&a[i][1]);
		bool flag=0;
		for(int i=0;i<4;i++)b[i]=i;
		do{
			if(check(b[0],b[1],b[2])){flag=1;break;}
		}while(next_permutation(b,b+4));
		puts(flag?"Yes":"No");
	}
	return 0;
}
/*
【trick&&吐槽】
HDU7队竟然被这题卡了3个多小时然后打铁=.=
他们平时做比赛还是有铜~银的实力的……  可见读题的重要性

【题意】
给你四个矩形,让你选出三个,并判断这三个矩形是否能恰好构成一个大的矩形

【类型】
模拟

【分析】
第一种构造法:左中右,即1*3
第二种构造法:左+(卡)
两种方法搞一下即可。
简化写法更好写更方便哦~

*/


下面是笨拙一点的写法——

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<math.h>
#include<iostream>
#include<string>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<bitset>
#include<algorithm>
#include<time.h>
using namespace std;
void fre(){freopen("c://test//input.in","r",stdin);freopen("c://test//output.out","w",stdout);}
#define MS(x,y) memset(x,y,sizeof(x))
#define MC(x,y) memcpy(x,y,sizeof(x))
#define MP(x,y) make_pair(x,y)
#define ls o<<1
#define rs o<<1|1
typedef long long LL;
typedef unsigned long long UL;
typedef unsigned int UI;
template <class T1,class T2>inline void gmax(T1 &a,T2 b){if(b>a)a=b;}
template <class T1,class T2>inline void gmin(T1 &a,T2 b){if(b<a)a=b;}
const int N=0,M=0,Z=1e9+7,ms63=1061109567;
int casenum,casei;
struct A
{
	int h,w;
}a[4];
bool ok(int len,A a,A b)
{
	if(len==a.h+b.h&&a.w==b.w)return 1;
	if(len==a.h+b.w&&a.w==b.h)return 1;
	if(len==a.w+b.h&&a.h==b.w)return 1;
	if(len==a.w+b.w&&a.h==b.h)return 1;
	return 0;
}
bool check(A a,A b,A c)
{
	//第一种构造法:左中右,即1*3
	if(a.h==b.h&&a.h==c.h)return 1;
	if(a.h==b.h&&a.h==c.w)return 1;
	if(a.h==b.w&&a.h==c.h)return 1;
	if(a.h==b.w&&a.h==c.w)return 1;
	if(a.w==b.h&&a.w==c.h)return 1;
	if(a.w==b.h&&a.w==c.w)return 1;
	if(a.w==b.w&&a.w==c.h)return 1;
	if(a.w==b.w&&a.w==c.w)return 1;
	//第二种构造法:左+(卡)
	if(ok(a.h,b,c))return 1;
	if(ok(a.w,b,c))return 1;
	if(ok(b.h,a,c))return 1;
	if(ok(b.w,a,c))return 1;
	if(ok(c.h,a,b))return 1;
	if(ok(c.w,a,b))return 1;
	return 0;
}
int main()
{
	scanf("%d",&casenum);
	for(casei=1;casei<=casenum;casei++)
	{
		for(int i=0;i<4;i++)scanf("%d%d",&a[i].h,&a[i].w);
		puts(check(a[1],a[2],a[3])
			||check(a[0],a[2],a[3])
			||check(a[0],a[1],a[3])
			||check(a[0],a[1],a[2])
			?"Yes":"No");
	}
	return 0;
}
/*
【trick&&吐槽】
HDU7队竟然被这题卡了3个多小时然后打铁=.=
他们平时做比赛还是有铜~银的实力的……  可见读题的重要性

【题意】
给你四个矩形,让你选出三个,并判断这三个矩形是否能恰好构成一个大的矩形

【类型】
模拟

【分析】
第一种构造法:左中右,即1*3
第二种构造法:左+(卡)
两种方法搞一下即可。

*/


版权声明:题解中哪里写错请一定要指出来QwQ 转载还请注明下出处哦,谢谢^_^

ACM-ICPC北京赛区2015 G Mysterious Antiques in Sackler Museum hihoCoder 1255

简单模拟,注意不要漏情况 #include #include #include #include #include using namespace std; int h[5],hh...

hihocoder 1255 Mysterious Antiques in Sackler Museum

题目链接:G题题目大意:给你四个小矩形,问能不能选取其中三个小矩形组成一个大矩形题目思路:三个小矩形能构成大矩形的构造方法只有两种,三个排成一排或者一个左边,两个右边但是一个在右边上,一个右边下,方向...

hihocoder #1255 枚举

开始看错以为是4个 三个长方形组合只有两种情况,一条直线或“1+2”: #include #include #include #include #include #include ...
  • yeqm_
  • yeqm_
  • 2015年11月15日 20:49
  • 287

HDU 5968 异或密码 【模拟】 2016年中国大学生程序设计竞赛(合肥)

异或密码 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

HDU 5969 最大的位或 【贪心】 (2016年中国大学生程序设计竞赛(合肥))

最大的位或 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

【2015-2016 ACM-ICPC Pacific Northwest Regional Contest (Div 1)D】【水题】Triangle 两个三角形是否可以恰好拼成矩形

#include #include #include #include #include #include #include #include #include #include #include #...

【hihocoder1257 2015北京赛区I】【构造 从公式入手】Snake Carpet 构造矩阵使得恰好容纳1~n个拐拐蛇行图案

#include #include #include #include #include #include using namespace std; #define MS(x,y) memset(x,...

【hihocoder1249 2015北京赛区A】【打标记线性扫描法】 Xiongnu's Land 土地划分使得左边比右边大且尽可能接近

#include #include typedef long long LL; const int N=1e6+10; int n,g; int y,x,w,h; int a[N]; int main...

【2015-2016 ACM-ICPC, NEERC, Northern Subregional Contest A】【水题 讨论】Alex Origami Squares 矩形内置三个最大正方形

#include #include #include #include #include #include #include #include #include #include #include #...

hihoCoder 1228 Mission Impossible 6 2015北京网络赛 大模拟

2015北京网络赛第四题
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【hihocoder1255 2015北京赛区G】【简单模拟 简化写法超棒哦】 Mysterious Antiques in Sackler Museum 四个矩形选三个 恰好拼成大矩形
举报原因:
原因补充:

(最多只允许输入30个字)