糊涂的教授
问题描述:陈教授 是一个国际知名的教授, 很多单位都争先恐后邀请他演讲是一个国际知名的教授, 很多单位都争先恐后邀请他演讲今天下午 陈教授就要 做一个非常重要的演讲。 由于陈教授年纪大了,对一些不重要的小 由于陈教授年纪大了,对一些不重要的小 事情有点糊涂,今天上午 事情有点糊涂,今天上午 事情有点糊涂,今天上午 事情有点糊涂,今天上午 他把自己做演讲要用的幻灯片随便堆放在一起。因此, 他把自己做演讲要用的幻灯片随便堆放在一起。因此, 他把自己做演讲要用的幻灯片随便堆放在一起。因此, 他把自己做演讲要用的幻灯片随便堆放在一起。因此, 他把自己做演讲要用的幻灯片随便堆放在一起。因此, 他把自己做演讲要用的幻灯片随便堆放在一起。因此, 他把自己做演讲要用的幻灯片随便堆放在一起。因此, 演讲之前他不得去整理这些幻灯片。 由于时间很紧 ,他希望尽可能简单地完成 ,他希望尽可能简单地完成 它。情况是这样, 它。情况是这样, 陈教授这次演讲一共要用 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行,每一为个字母和数中间以空格隔开并且 行,每一为个字母和数中间以空格隔开并且 行,每一为个字母和数中间以空格隔开并且 行,每一为个字母和数中间以空格隔开并且- 4 -
各行以字母的升序排列,注意输出要大写并且顶格;反之若是对应无法 各行以字母的升序排列,注意输出要大写并且顶格;反之若是对应无法 各行以字母的升序排列,注意输出要大写并且顶格;反之若是对应无法 各行以字母的升序排列,注意输出要大写并且顶格;反之若是对应无法 实现,在文件的第一行顶格输出 None 即可。
行首末无多余空格输入出样例 输入出样例 输入出样例 1:
jiaoshou .in
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
jiaoshou .out
A 4
B 1
C 2
D 3
输入出样例 输入出样例 输入出样例 2:
jiaoshou .in
2
0 2
0 0 2
0 1 1
1
jiaoshou .out
None
题目大意:
给出N个矩形和N个点,问每个点是否能唯一对应一个矩形,并输出方案。
题解:
枚举出每个矩形包括的点(即点在矩形的横纵坐标范围内),做一次拓扑排序,若只有唯一方案即输出,否则输出None
const
maxn=26;
inf='jiaoshou.in';
ouf='jiaoshou.out';
type
arr1=array[1..maxn,1..4]of longint;
arr2=array[1..maxn,1..2]of longint;
var
a:array[1..maxn,1..4]of longint;
b:array[1..maxn,1..2]of longint;
n,i,j,p,k,l,l1:longint;
ans:array[1..maxn,-1..maxn]of longint;
f:array[1..maxn]of longint;
so:array[1..maxn]of longint;
procedure init;
var
i,j,x1,x2,y1,y2:longint;
begin
readln(n);
for i:=1 to n do
readln(a[i,1],a[i,2],a[i,3],a[i,4]);
for i:=1 to n do
readln(b[i,1],b[i,2]);
end;
function check(i,j:longint):boolean;
begin
if (b[j,1]>=a[i,1])and(b[j,1]<=a[i,2])and(b[j,2]>=a[i,3])and(b[j,2]<=a[i,4]) then exit(true);
exit(false);
end;
begin
assign(input,inf);reset(input);
assign(output,ouf);rewrite(output);
init;
for i:=1 to n do
for j:=1 to n do
if check(i,j) then
begin
inc(ans[i,0]);
ans[i,ans[i,0]]:=j;
ans[i,-1]:=ans[i,0];
end;
p:=0;
repeat
inc(p);
for i:=1 to n do
if ans[i,-1]=1 then
for j:=1 to ans[i,0] do
if f[ans[i,j]]=0 then
begin
so[i]:=ans[i,j];
f[ans[i,j]]:=1;
for k:=1 to n do
for l:=1 to ans[k,0] do
if ans[k,l]=so[i] then dec(ans[k,-1]);
end;
until p=n;
for i:=1 to n do
if so[i]=0 then
begin
writeln('None');
close(input);close(output);
halt;
end;
for i:=1 to n do
writeln(chr(65+i-1),' ',so[i]);
close(input);close(output);
end.