(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

Source

题解:

   本题是模拟;
   按题目要求,如果每个点都合法,那么都只有一个范围与它相对应;
   所以我们只要先找出有1个点只与1个范围对应,然后将它们(点和范围)分别标记为已用,然后找下一个点,直到找完即可

var
 px,py,qx,qy,x,y,ans:array[1..26]of longint;
 v,w:array[1..26]of boolean;
 n,i,j,k,l:longint;
 p:boolean;
begin
 read(n);
 for i:=1 to n do read(px[i],qx[i],py[i],qy[i]);
 for i:=1 to n do read(x[i],y[i]);
 repeat
  p:=true;
  for i:=1 to n do
   if not v[i] then//如果这个范围没被用过
    begin
     k:=0; l:=0;
     for j:=1 to n do
      if not(w[j]) and (x[i]>=px[j]) and (x[i]<=qx[j]) and (y[i]>=py[j]) and (y[i]<=qy[j]) then//如果这个点没被用过,且在当前范围内
       begin
        inc(k); l:=j;//记录是第几个点
       end;
     if k=1 then//只有一个对应点
      begin
       v[i]:=true;
       w[l]:=true;
       ans[l]:=i;//记录点对应的幻灯片
       p:=false;//找到有了个点有唯一对应的范围
      end;
      if not p then break;//找不到
     end;
until p;
 p:=true;
 for i:=1 to n do if ans[i]=0 then p:=false;//只要有一个点没被找出对应的范围,那么数据不合法
 if p then
       for i:=1 to n do writeln(char(i+64),' ',ans[i])
      else writeln('None')
end.

猜你喜欢

转载自blog.csdn.net/ssl_lzx/article/details/80172445
SSL