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");
}
}