zoukankan      html  css  js  c++  java
  • 糊涂的教授

    题目描述
    陈教授是一个国际知名的教授,很多单位都争先恐后邀请他演讲,今天下午陈教授就要做一个非常重要的演讲。由于陈教授年纪大了,对于一些不重要的小事情有点糊涂,今天上午他把自己做演讲要用的幻灯片随便堆放在一起。因此,演讲之前他不得不去整理这些幻灯片。由于时间很紧,他希望尽可能简单地完成它。情况是这样,陈教授这次演讲一共要用 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 即可。行首行末无多余空格。
    输入样例
    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

    .
    .
    .
    .
    .
    .
    分析
    我貌似用了暴力,但好像普遍都用了拓扑排序,还有打了匹配的

    .
    .
    .
    .
    .
    程序:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    
    int c[30][30],ans[30],q[1000],head=1,tail=1,tj[30];
    
    struct edge
    {
    	int x1,x2,y1,y2;
    }a[30];
    
    int main()
    {
    	freopen("jiaoshou.in","r",stdin);
    	freopen("jiaoshou.out","w",stdout);
    	int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        	scanf("%d%d%d%d",&a[i].x1,&a[i].x2,&a[i].y1,&a[i].y2);
        for (int i=1;i<=n;i++)
        {
        	int x,y;
            scanf("%d%d",&x,&y);
            for (int j=1;j<=n;j++)
    			if (x>a[j].x1&&x<a[j].x2&&y>a[j].y1&&y<a[j].y2)
                {  
    				tj[i]++;
                   	c[i][j]=1;
    			}
    	}
    	int wq=0;
        for (int i=1;i<=n;i++)
        {   
    		if (tj[i]==0) return false; else 
    		if (tj[i]==1)
            {
    			q[tail++]=i;
    			wq=1;
    		} 
        }
    	while (head!=tail)
        {
        	int u=q[head++],t;
            for (int i=1;i<=n;i++)
                if (c[u][i]==1)
                 {
                   ans[i]=u;
    			   t=i;
                 }
        	for (int i=1;i<=n;i++)
                if (c[i][t]==1)
                {
                    c[i][t]=0;
                    tj[i]--;
                    if (tj[i]==1) q[tail++]=i;
                }
         }
         int bz=0;
         for (int i=1;i<=n;i++)
    	 	if (q[i]) bz=0; else
    	 	{
    	 		bz=1;
    	 		break;
    	 	} 
        if (bz==0) 
    	{
    		 for (int i=1;i<=n;i++)
        		printf("%c %d
    ",i+'A'-1,ans[i]);
    	} else printf("None");
    	fclose(stdin);
    	fclose(stdout);
        return 0;
    }
    
  • 相关阅读:
    进入MFC讲坛的前言(四)
    进入MFC讲坛的前言(二)
    进入MFC讲坛的前言(一)
    进入MFC讲坛的前言(三)
    jar命令+7z:创建,替换,修改,删除Jar, war, ear包中的文件
    java架构之项目结构(entity / DTO / VO)
    面试无忧之Zookeeper总结心得
    BigDecimal.setScale 处理java小数点
    最详细的 paypal 支付接口开发--Java版
    社会化登录分享-Android SDK的二次封装和使用
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/11094931.html
Copyright © 2011-2022 走看看