• VIJOS PID221 / 烦人的幻灯片


     暴力出奇迹,学长诚不欺我。

    PID221 / 烦人的幻灯片

    题目描述

    李教授于今天下午做一个非常重要的演讲。不幸的是他不是一个非常爱整洁的人,他把自己做演讲要用的幻灯片随便堆放在一起。因此,演讲之前他不得不去整理这些幻灯片。做为一个讲求效率的学者,他希望尽可能简单地完成它。情况是这样,教授这次演讲一共要用n张幻灯片(n<=26),这n张幻灯片按照演讲要使用的顺序已经用数字1,2,…,n在上面编上了号。因为幻灯片是透明的,所以我们不能一下子看清每一个数字所对应的幻灯片。

    现在我们用大写字母A,B,C,。。。再次把幻灯片依次编上号,如样例所示,我们可以很快发现编号为A的幻灯片是第4张,把它抽出来后我们又可以确定编号为C的幻灯片是第2张,。。。

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

    输入格式

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

    (其实是键盘输入了啦)

    输出格式

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

    (其实是屏幕输出了啦。。。)

    样例输入

    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

    样例输出

    A4
    B1
    C2
    D3

    #include<cstdio>
    using namespace std;
    #define MAXN 101
    struct pianzi
    {
        int xmin;
        int ymin;
        int xmax;
        int ymax;
    };
    int tot=0;
    int n;
    pianzi huan[MAXN];
    int map[MAXN][MAXN];
    int ans=0;
    int train[MAXN];
    int visited[MAXN]; 
    int note[MAXN];
    void dfs(int x)
    {
        if(x>n+1)
          return;
        ans++;
        if(ans==n+1)
          {
              tot++;
              for(int i=1;i<=n;i++)
                note[i]=train[i];
          }
        for(int i=1;i<=n;i++)
        {
            if(map[x][i]==1&&visited[i]==0)
            {
                visited[i]=1;
                train[x]=i;
                dfs(x+1);
                ans--;
                visited[i]=0;
            }
        }
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            scanf("%d %d %d %d",&huan[i].xmin,&huan[i].xmax,&huan[i].ymin,&huan[i].ymax);
        }
        for(int i=1;i<=n;i++)
        {
            int vi,vj;
            scanf("%d %d",&vi,&vj);
            for(int j=1;j<=n;j++)
            {
                if(vi>=huan[j].xmin&&vi<=huan[j].xmax&&vj>=huan[j].ymin&&vj<=huan[j].ymax)
                  map[j][i]=1;
            }
        }
        dfs(1);
        if(tot==1)
          for(int i=1;i<=n;i++)
            printf("%c%d
    ",i-1+'A',note[i]);
        else
          printf("None");
        return 0;
    }

     

  • 相关阅读:
    初学Cocos2dx
    炸弹人NABCD分析
    求二维整数数组中最大联通子数组的和
    大道之简读书笔记1
    求首位相连二维数组最大子矩阵的和
    求首位相连一维数组最大子数组的和
    求二维数组最大子数组的和
    程序员修炼之道读后感3
    电梯调度需求分析
    课堂作业第四周课上作业二
  • 原文地址:https://www.cnblogs.com/kuaileyongheng/p/6710909.html
Copyright © 2020-2023  润新知