• CODE[VS] 2617 高校排名


    题目描述 Description

    大学排名现在已经非常流行。在网上搜索可查到关于中国大学排行的各个方面的消息。

    我们知道,在一大学里通常都由许多不同的“系”(专业)组成,比如计算机系(简称CS);电子工程系(简称EE);外语系(简称FLS),等等。在一个大学里,其某一专业也许国内排前几,但其他专业却默默无闻。因此,大多数大学排行榜都有不同专业的详细的排名。

    虽然信息量如此巨大,但是却掩盖不了一个严重的问题:究竟哪个大学更好?幸运的是,波布博士提出了一个新概念“绝对更好”,使得这个难题能被部分解决。

    为了更好地阐述波布博士的新概念,我们举一个例子:

    假设现在有三大学:X大学、Y大学、Z大学。每所大学都有三个专业:CS,EE,FLS。而这三所大学三个专业国际公认的排名如下:

    CS排名:X>Y>Z(X>Y表示X的CS专业比Y的好)

    EE排名:X>Z>Y

    FLS排名:Z>X>Y

    显然,X大学的每个专业都比Y大学好,所以X大学绝对比Y大学好。运用这个概念我们就能比较出一些大学的优劣。

    现在波布博士有一份完整的各个大学不同专业的排名,他想提出K问题,每个问题是比较两个大学Ui和Uj,看Ui是否一定比Uj好。

    你能回答波布博士这K个问题么?

    输入描述 Input Description

    第一行有三个整数N,M,K(0<N,M,K≤100),表示有N所大学和M项专业。

    接下来的M行中,第i(1≤i≤m)行有N所大学的编号Uj(1≤j≤N,1≤Uj≤N),代表第i个专业N大学的排名(越在前的大学排名越前)。

    接下来的K行中,第i(1≤i≤K)行有两所大学的编号Ui和Uj(1≤Ui<Uj≤N),即要比较大学Ui是否一定比大学Uj好。

    输出描述 Output Description

    输出文件有K行,第i行即对第i个问题的回答,如果大学Ui一定比Uj好,输出“Yes”,否则输出“No” 。

    样例输入 Sample Input

    3 3 2

    1 2 3

    1 3 2

    3 1 2

    1 2

    2 3

    样例输出 Sample Output

    Yes

    No

    数据范围及提示 Data Size & Hint

    0<N,M,K≤100

    那这就是一个比较简单的模拟。

    第一份代码,:

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    
    int n,m,k,x,y,tot;
    int a[1002][1002],q;
    
    int main()
    {
        scanf("%d%d%d",&n,&m,&k);
        for(int i=1;i<=n;++i)
            for(int j=1;j<=m;++j)
            {
                scanf("%d",&q);
                a[q][i]=j;
            }    
        for(int i=1;i<=k;++i)
        {
            tot=0;    //important
            scanf("%d%d",&x,&y);
            for(int j=1;j<=m;++j)
                if(a[y][j]>a[x][j])
                    tot++;
            if(tot==m)
                printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
    80分看能找出错误吗

    第二份,ac代码:

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    
    int n,m,k,x,y,tot;
    int a[102][102],q;
    
    int main()
    {
        scanf("%d%d%d",&n,&m,&k);
        for(int i=1;i<=m;++i)
            for(int j=1;j<=n;++j)
            {
                scanf("%d",&q);
                a[q][i]=j;
            }    
        for(int i=1;i<=k;++i)
        {
            tot=0;    //important
            scanf("%d%d",&x,&y);
            for(int j=1;j<=m;++j)
                if(a[y][j]>a[x][j])
                    tot++;
            if(tot==m)
                printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
    m和n的顺序,仔细研究一下,谁该是第一层,谁该是第二层。
  • 相关阅读:
    Linux命令-网络命令:netstat
    Linux命令-网络命令:traceroute
    Linux命令-网络命令:lastlog
    Linux命令-网络命令:last
    mongodb3.4 安装及用户名密码设置
    MySQL表名不区分大小写的设置方法
    数据库设计中的四个范式
    dubbo本地调试直连
    com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1169 > 1024)
    Linux服务器时间同步
  • 原文地址:https://www.cnblogs.com/Mary-Sue/p/9165554.html
Copyright © 2020-2023  润新知