http://www.cogs.pro/cogs/problem/problem.php?pid=438
★☆ 输入文件:slides.in
输出文件:slides.out
简单对比
时间限制:1 s 内存限制:128 MB
【问题描述】
李教授将于今天下午作一次非常重要的演讲。不幸的是他不是一个非常爱整洁的人,他把自己演讲要用的幻灯片随便堆在了一起。因此,演讲之前他不得不去整理这些幻灯片。做为一个讲求效率的学者,他希望尽可能简单地完成它。教授这次演讲一共要用n张幻灯片(n≤26),这n张幻灯片按照演讲要使用的顺序已经用数字l,2,…,n在上面编了号。因为幻灯片是透明的,所以我们不能一下子看清每一个数字所对应的幻灯片。
现在我们用大写字母A,B,C,…再次把幻灯片依次编号。你的任务是编写一个程序,把幻灯片的数字编号和字母编号对应起来,显然这种对应应该是惟一的;若是出现多种对应的情况或是某些数字编号和字母编号对应不起来,我们就称对应是无法实现的。
【输入格式】
幻灯片的情况通过一个文本文件slides.in输入。
文件的第1行只有一个整数n,表示有n张幻灯片,接下来的n行每行包括4个整数Xmin,Xmax,Ymin,Ymax(整数之间用空格分开)为幻灯片的坐标,这n张幻灯片按其在输入文件中出现的顺序从前到后依次编号为A,B,C,…
再接下来的n行依次为n个数字编号的坐标x,y,显然在幻灯片之外是不会有数字的。
【输出格式】
要求将程序的运行结果写入一个名为slides.out的文本文件。若是对应可以实现,输出文件应该包括n行,每一行为一个字母和一个数字,中间以一个空格隔开,并且各行以字母的升序排列,注意输出的字母要大写并且顶格;反之,若是对应无法实现,在文件的第1行顶格输出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
输 出
A 4
B 1
C 2
D 3
数据很水。。貌似随便写写就能过
1 #include <cstring> 2 #include <cstdio> 3 4 int n,x,y,ans; 5 struct Node 6 { 7 int xmax,xmin,ymax,ymin; 8 }zm[27]; 9 10 bool vis[27]; 11 int rd[27],match[27],map[27][27]; 12 bool find(int u) 13 { 14 for(int v=1;v<=n;v++) 15 if(map[u][v]&&!vis[v]) 16 { 17 vis[v]=1; 18 if(!match[v]||find(match[v])) 19 { 20 match[v]=u; 21 return true; 22 } 23 } 24 return false; 25 } 26 27 inline void read(int &x) 28 { 29 x=0; register char ch=getchar(); 30 for(;ch>‘9‘||ch<‘0‘;) ch=getchar(); 31 for(;ch>=‘0‘&&ch<=‘9‘;ch=getchar()) x=x*10+ch-‘0‘; 32 } 33 34 int AC() 35 { 36 freopen("slides.in","r",stdin); 37 freopen("slides.out","w",stdout); 38 39 read(n); 40 for(int i=1;i<=n;i++) 41 read(zm[i].xmin),read(zm[i].xmax),read(zm[i].ymin),read(zm[i].ymax); 42 for(int i=1;i<=n;i++) 43 { 44 read(x),read(y); 45 for(int j=1;j<=n;j++) 46 if(zm[j].xmax>=x&&zm[j].xmin<=x&&zm[j].ymax>=y&&zm[j].ymin<=y) 47 map[i][j]=1,rd[j]++; 48 } 49 for(int i=1;i<=n;i++) 50 { 51 if(find(i)) ans++; 52 memset(vis,0,sizeof(vis)); 53 } 54 bool flag=0; 55 for(int i=1;i<=n;i++) 56 if(rd[i]<2) flag=1; 57 if(ans!=n||!flag) printf("None"); 58 else 59 { 60 for(int i=1;i<=n;i++) 61 { 62 printf("%c ",‘A‘+i-1); 63 printf("%d\n",match[i]); 64 } 65 } 66 return 0; 67 } 68 69 int Hope=AC(); 70 int main(){;}