SSL2654 糊涂的教授

糊涂的教授

Description

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

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

Input

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

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

Output

结果输出到名为 jiaoshou.out 的文本文件。若是对应可以实现,你的输出文件应该包括 n 行,每一行为一个字母和一个数字,中间以一个空格隔开,并且 

各行以字母的升序排列,注意输出的字母要大写并且顶格;反之,若是对应无法 

实现,在文件的第一行顶格输出 None 即可。行首行末无多余空格。

Sample Input

输入样例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

2			
0  2  0  2
0  2  0  2
1  1		
1  1	

Sample Output

输出样例1
A 4
B 1
C 2
D 3

输出样例2

None

分析:把每个与幻灯片匹配的点记下来构造一个图然后做拓扑排序。

代码
var
  a:array[0..26,0..26] of longint;
  ans,d:array[0..26] of longint;
  f:array[0..26] of boolean;
  n:longint;


procedure init;
var
  i,j,x,y:longint;
  x1,y1,x2,y2:array[0..26] of longint;
begin
  readln(n);
  for i:=1 to n do
    readln(x1[i],x2[i],y1[i],y2[i]);
  for j:=1 to n do
    begin
      readln(x,y);
      for i:=1 to n do
        if (x>=x1[i]) and (x<=x2[i]) and (y>=y1[i]) and (y<=y2[i])
          then begin
                 inc(a[i,0]);
                 a[i,a[i,0]]:=j;
                 d[i]:=a[i,0];
               end;
    end;
end;


procedure main;
var
  m,i,j,k,l:longint;
begin
  m:=0;
  while m<n do
    begin
      inc(m);
      for i:=1 to n do
        if d[i]=1 then
          for j:=1 to a[i,0] do
            if not f[a[i,j]] then
              begin
                f[a[i,j]]:=true;
                ans[i]:=a[i,j];
                for k:=1 to n do
                  for l:=1 to a[k,0] do
                    if ans[i]=a[k,l] then dec(d[k]);
              end;
    end;
end;


procedure print;
var
  i:longint;
begin
  for i:=1 to n do
    if ans[i]=0 then
      begin
        writeln('None');
        halt;
      end;
  for i:=1 to n do
    writeln(chr(64+i),' ',ans[i]);
end;


begin
  init;
  main;
  print;
end.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值