糊涂的教授【模拟】

>Description
陈教授是一个国际知名的教授,很多单位都争先恐后邀请他演讲,今天下午陈教授就要做一个非常重要的演讲。由于陈教授年纪大了,对于一些不重要的小事情有点糊涂,今天上午他把自己做演讲要用的幻灯片随便堆放在一起。因此,演讲之前他不得不去整理这些幻灯片。由于时间很紧,他希望尽可能简单地完成它。情况是这样,陈教授这次演讲一共要用 n 张幻灯片(n<=26),这 n 张幻灯片按照演讲要使用的顺序已经用数字 1,2,…,n 在上面编上了号。因为幻灯片是透明的,所以我们不能一下子看清每一个数字所对应的幻灯片。
现在我们用大写字母 A,B,C,…再次把幻灯片依次编上号,你的任务是编写一个程序,把幻灯片的数字编号和字母编号对应起来,显然这种对应应该是唯一的;若是出现多种对应的情况或是某些数字编号和字母对应不起来,我们就称对应是无法实现的。


>Input
文件第一行只有一个数n,表示有 n 张幻灯片,接下来的 n 行第行包括 4 个整数 Xmin,Xmax,Ymin,Ymax (整数之间用空格分开),为幻灯片的坐标,这 n 张幻灯片按其在输入文件中出现的顺序从前到后依次编号为 A,B,C,…再接下来的 n 行依次为 n 个数字编号的坐标 X,Y,显然在幻灯片之外是不会有数字的。

>Output
若是对应可以实现,你的输出文件应该包括 n 行,每一行为一个字母和一个数字,中间以一个空格隔开,并且各行以字母的升序排列,注意输出的字母要大写并且顶格;反之,若是对应无法实现,在文件的第一行顶格输出 None 即可。行首行末无多余空格。


>Sample Input
4
6 22 10 20
4 18 6 16
8 20 2 18
10 24 4 8
9 15
19 17
11 7
21 11

>Sample Output
A 4
B 1
C 2
D 3


>解题思路
直接模拟就可以了(纯模拟)。


>代码

#include<iostream>
#include<cstdio>
using namespace std;
int n,sum,x[30],y[30],xx[30],yy[30],sx[30],sy[30],m[30],ans[30],jc;
bool lhq[30];
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	 scanf("%d%d%d%d",&xx[i],&x[i],&y[i],&yy[i]); //(x,y)为左上角,(xx,yy)为右下角
	for(int i=1;i<=n;i++)
	{
		scanf("%d%d",&sx[i],&sy[i]); //(sx,sy)每个数字的坐标
		for(int j=1;j<=n;j++)
		 if(sx[i]<x[j]&&sx[i]>xx[j]&&sy[i]<yy[j]&&sy[i]>y[j]) //如果数字在幻灯片里面
		  m[i]++; //m[i]记录第i个数字被几张幻灯片包含
	}
	while(sum<n) //sum记录当前已有几个数字"物归原主"
	{
		jc=sum;
		for(int i=1;i<=n;i++)
		 if(m[i]==1) //找哪个数字只能属于一张幻灯片
		 {
		 	sum++; m[i]--; //m[i]--防止死循环
		 	for(int j=1;j<=n;j++)
		     if(!lhq[j]&&sx[i]<x[j]&&sx[i]>xx[j]&&sy[i]<yy[j]&&sy[i]>y[j]) //找第i个数字只能属于的是哪张幻灯片
		     {
		     	lhq[j]=1; ans[i]=j; //lhq记录某张幻灯片是否被查找过,ans记录答案
		     	for(int ii=1;ii<=n;ii++)
		     	 if(sx[ii]<x[j]&&sx[ii]>xx[j]&&sy[ii]<yy[j]&&sy[ii]>y[j]) //找有哪些点被第j张幻灯片包含
		     	  m[ii]--; //因为"第i个数字只能属于第j张幻灯片",所以"第j张幻灯片只能属于第i个数字"
		     }
		 }
		if(jc==sum) //如果数据没有被更新,说明对应无法实现
		{
			printf("None\n");
			return 0;
		}
	}
	for(int i=1;i<=n;i++)
	 for(int j=1;j<=n;j++)
	  if(ans[j]==i)
	   printf("%c %d\n",'A'+i-1,j);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43010386/article/details/91872270