4.21特长生模拟 糊涂的教授

题目

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

现在我们用大写字母 A,B,C,…,再次把幻灯片依次编上号,你的任务是编写一个程序,把幻灯片的数字编号和字母编号对应起来,显然这种对应应该是唯一的;若是出现多种对应的情况或是某些数字编号和字母对应不起来,我们就称对应是无法实现的。

幻灯片的情况通过一个文本文件 jiaoshou.in 输入。文件第一行只有一个数n,表示有 n 张幻灯片,接下来的 n 行第行包括 4 个整数 Xmin,Xmax,Ymin,Ymax

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

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

题解

数据只有26!!
本来以为要用匹配,但是题目要求唯一方案
可以对图进行拓补排序,最后如果有点没有找到与之对应的点,则无答案,否则输出每个点对应的点
(相当于暴力)
http://blog.csdn.net/dm_vincent/article/details/7714519 拓补排序详解

代码

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int x1[30],x2[30],y1[30],y2[30];
int b[30][30],bz[30],ans[30];

int main()
{
    int n,m=0;
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
        scanf("%d%d%d%d",&x1[i],&x2[i],&y1[i],&y2[i]);
    for (int i=1;i<=n;i++)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        for (int j=1;j<=n;j++)
        if (x>=x1[j]&&x<=x2[j]&&y>=y1[j]&&y<=y2[j])
        {
            b[j][0]++;
            b[j][b[j][0]]=i;
            b[j][27]=b[j][0];
        }
    }
    for (int i=1;i<=n;i++)
    {
        for (int j=1;j<=n;j++)
        if (b[j][27]==1)
        { 
            for (int k=1;k<=b[j][0];k++)
            if (bz[b[j][k]]==0)
            {
                bz[b[j][k]]=1;
                ans[j]=b[j][k];
                m++;
                for (int s=1;s<=n;s++)
                    for (int t=1;t<=b[s][0];t++)
                        if (b[s][t]==b[j][k]) b[s][27]--;
            }
        }
    }
    if (n==m) 
    {
        for (int i=1;i<=n;i++)
            printf("%c %d\n",i+64,ans[i]); 
    }
    else printf("None");
}

猜你喜欢

转载自blog.csdn.net/yjy_aii/article/details/80030451