列表

详情


NC215148. 小西和拼图

描述

小西得到了一套拼图,拼图里有的小拼图,每个的小方格上都有一个数字。

现在小西想使用这些拼图来组成一个的方形,注意每个小拼图的边缘必须平行于最后这个方形的对应边,且拼图间不能重叠,也不能留空隙

小西发现拼图中每一种小拼图都有无数张,并且小西希望最后这个方形的每个小方格的数字,都是关于主对角线对称的。也就是说假设最后这个方形为,那么对于每个都有。注意只需要数字相等即可,不需要数字的字符形状对称。

小西想知道她能拼出吗?

注意:拼图上的数字是印刷的,所以当然也不能旋转小拼图。

输入描述

第一行输入一个整数表示测试用例组数,接下来有组测试用例。
对于每组测试用例:
第一行输入两个整数分别表示有种小拼图和最后的尺寸。
接下来行表示块小拼图的数字分布,每一块由两行组成,第一行是左上角、右上角;第二行是左下角、右下角

包括在内,所有数字的范围都在

输出描述

对于每组测试用例输出一行一个字符串。如果这组测试用例小西能拼出来就输出YES,否则输出NO

示例1

输入:

6
3 4
1 2
5 6
5 7
7 4
8 9
9 8
2 5
1 1
1 1
2 2
2 2
1 100
10 10
10 10
1 2
4 5
8 4
2 2
1 1
1 1
1 2
3 4
1 2
1 1
1 1

输出:

YES
NO
YES
NO
YES
YES

说明:

比如说第一组测试用例,n=3,m=4
接下来6行里
1 2
5 6是第一种小拼图
5 7
7 4是第二种
8 9
9 8是第三种

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 6ms, 内存消耗: 512K, 提交时间: 2021-12-09 15:30:28

#include <iostream>
#include <stdio.h>
using namespace std;

int main(){
	int t,n,m;
	int a,b,c,d;
	scanf("%d",&t);
	while(t--){
		scanf("%d%d",&n,&m);
		int f=0;
		for(int i=0;i<n;i++){
			scanf("%d%d%d%d",&a,&b,&c,&d);
			if(b==c) f=1;
		}
		if((m&1)==0&&f==1) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}
	return 0;
} 

C(clang11) 解法, 执行用时: 7ms, 内存消耗: 376K, 提交时间: 2020-12-21 21:20:45

#include<stdio.h>
int main() {
	int t;
	scanf("%d",&t);
	while(t--) {
		int n,m,a,b,c,d,count=0;
		scanf("%d%d",&n,&m);
		for(int i=0;i<n;i++) {
			scanf("%d%d%d%d",&a,&b,&c,&d);
			if(b==c) //有一组对角线数据相同即可
				count=1;
		}
		if(m%2==0&&count!=0)
			printf("YES\n");
		else
			printf("NO\n");//若m为奇数就不可能组成
	}
	return 0;
}

上一题