【SSLGZ 2654】【TE】糊涂的教授

问题描述
陈教授是一个国际知名的教授,很多单位都争先恐后邀请他演讲,今天下午陈教授就要做一个非常重要的演讲。由于陈教授年纪大了,对于一些不重要的小事情有点糊涂,今天上午他把自己做演讲要用的幻灯片随便堆放在一起。因此,演讲之前他不得不去整理这些幻灯片。由于时间很紧,他希望尽可能简单地完成它。情况是这样,陈教授这次演讲一共要用 n 张幻灯片(n<=26),这 n 张幻灯片按照演讲要使用的顺序已经用数字 1,2,…,n 在上面编上了号。因为幻灯片是透明的,所以我们不能一下子看清每一个数字所对应的幻灯片。
现在我们用大写字母 A,B,C,…,再次把幻灯片依次编上号,你的任务是编写一个程序,把幻灯片的数字编号和字母编号对应起来,显然这种对应应该是唯一的;若是出现多种对应的情况或是某些数字编号和字母对应不起来,我们就称对应是无法实现的。
输入
文件第一行只有一个数n,表示有 n 张幻灯片,接下来的 n 行第行包括 4 个整数 Xmin,Xmax,Ymin,Ymax(整数之间用空格分开),为幻灯片的坐标,
这 n 张幻灯片按其在输入文件中出现的顺序从前到后依次编号为 A,B,C,…,再接下来的 n 行依次为 n 个数字编号的坐标 X,Y,显然在幻灯片之外是不会有数字的。
输出
若是对应可以实现,你的输出文件应该包括 n 行,每一行为一个字母和一个数字,中间以一个空格隔开,并且各行以字母的升序排列,注意输出的字母要大写并且顶格;
反之,若是对应无法 实现,在文件的第一行顶格输出 None 即可。行首行末无多余空格。
样例输入1
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
样例输入2
0 2 0 2
0 2 0 2
1 1
1 1
样例输出1
A 4
B 1
C 2
D 3
样例输出2
None
算法讨论
我用了深搜的方法,很明显没有优化会超时→_→,但我还没去优化,有时间再改吧(懒)。

const
  maxn=30;
var
  x,x1,x2,y,y1,y2,o,s:array[1..maxn] of longint;
  f:array[1..maxn] of boolean;
  i,j,n,ans:longint;

function check:boolean;
var
  f:array[1..maxn] of longint;
  i:longint;
begin
  fillchar(f,sizeof(f),0);
  for i:=1 to n do
    begin
      inc(f[o[i]]);
      if f[o[i]]>1
        then exit(false)
    end;
  exit(true)
end;

procedure dfs(dep:longint);
var
  i:longint;
begin
  if dep>n
    then begin
           if check
             then begin
                    inc(ans);
                    s:=o
                  end;
           if ans>1
             then begin
                    write('None');
                    halt
                  end;
           exit;
         end;
  for i:=1 to n do
    if (x[i]>x1[dep]) and (x[i]<x2[dep]) and (y[i]>y1[dep]) and (y[i]<y2[dep]) and (f[i]=false)
      then begin
             o[dep]:=i;
             f[i]:=true;
             dfs(dep+1);
             f[i]:=false;
             o[dep]:=0
           end;
end;

begin
  assign(input,'jiaoshou.in'); reset(input);
  assign(output,'jiaoshou.out'); rewrite(output);
  readln(n);
  for i:=1 to n do
    read(x1[i],x2[i],y1[i],y2[i]);
  for i:=1 to n do
    read(x[i],y[i]);
  dfs(1);
  for i:=1 to n do
    writeln(chr(64+i),' ',s[i]);
  close(input); close(output)
end.

这里写图片描述
Pixiv ID:61438829

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值