迷糊的教授

本博客介绍了一个关于幻灯片与数字编号匹配的算法问题,涉及到坐标判断和唯一性检查,目的是帮助陈教授在紧急情况下快速整理演讲用的幻灯片,确保每个幻灯片上的数字编号与其正确对应。

BeforeBeforeBefore thethethe texttexttext

LYFLYFLYF大佬正解竟然是拓扑???
我的做法和程序怕是假的吧

DescriptionDescriptionDescription

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

InputInputInput

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

OutputOutputOutput

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

SampleSampleSample InputInputInput

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

SampleSampleSample OutputOutputOutput

A  4
B  1
C  2
D  3

TrainTrainTrain ofofof ThoughtThoughtThought

首先,一个坐标判断,看一个数字能对应的的幻灯片有多少个,然后找唯一的,绑到一起,然后把有这个幻灯片的数字去掉这个幻灯片,然后继续找唯一的

CodeCodeCode

#include<cstdio>
#include<iostream>
using namespace std;
bool b;
int tt,n,xf[35],xt[35],ttt,yf[35],yt[35],a[35][35],ans[105],sx,sy,t[35];
int main()
{
	tt=64;
	scanf("%d",&n);
	for (int i=1; i<=n; ++i)
		scanf("%d%d%d%d",&xf[i],&xt[i],&yf[i],&yt[i]);
	for (int i=1; i<=n; ++i)
	{
		scanf("%d%d",&sx,&sy);
		for (int j=1; j<=n; ++j) { 
		 if (sx>=xf[j] && sx<=xt[j] && sy>=yf[j] && sy<=yt[j])
		      a[i][++t[i]]=j;//判断这个数字是不是这个字母
		} 
	}
	ttt=n;
	while (ttt>0) { 
	for (int i=1; i<=n; ++i)
	{
		if (t[i]==1) {
			b=true;//判断有没有唯一性
			ans[tt+a[i][1]]=i;
			for (int k=1; k<=n; ++k)
			 for (int kk=1; kk<=t[k]; ++kk)
			  if (a[k][kk]==a[i][1] && k!=i)
			   swap(a[k][kk],a[k][t[k]]),a[k][t[k]]=0,t[k]--;//去掉数字中对应的这个幻灯片
			ttt--; a[i][1]=0; t[i]--; 
		}
	}
		if (b==true) b=false;
		 else {printf("None"); return 0;}
	} 
	for (int i=1; i<=n; ++i)
	{
		printf("%c %d",64+i,ans[64+i]);
		printf("\n");
	}
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值