zoukankan      html  css  js  c++  java
  • 【拓扑排序】烦人的幻灯片(slides)

    1395:烦人的幻灯片(slides)


    时间限制: 1000 ms         内存限制: 65536 KB
    提交数: 753     通过数: 416 

    【题目描述】

    李教授将于今天下午作一次非常重要的演讲。不幸的事他不是一个非常爱整洁的人,他把自己演讲要用的幻灯片随便堆在了一起。因此,演讲之前他不得不去整理这些幻灯片。作为一个讲求效率的学者,他希望尽可能简单地完成它。教授这次演讲一共要用n张幻灯片(n≤26),这n张幻灯片按照演讲要使用的顺序已经用数字1~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


    记录每个数字对应几个字母 每次找出度为1的数字入队,进行拓扑排序.

    #include<bits/stdc++.h>
    using namespace std;
    const int ll=50;
    struct node {
        int xi,xa,yi,ya;
    } qu[ll];
    struct point {
        int x,y;
    } po[ll];
    int n,sum;
    int du[ll],book[ll][ll],ans[ll];
    void find(int x) {
        sum++;
        du[x]--;
        for(int i=1; i<=n; ++i) {
            if(book[x][i]) {
                ans[i]=x;
                book[x][i]=0;
                for(int j=1; j<=n; ++j) {
                    if(book[j][i]) {
                        du[j]--;
                        book[j][i]=0;
                        if(du[j]==1) find(j);
                    }
                }
                break;
            }
        }
        return ;
    }
    int main() {
        cin>>n;
        for(int i=1; i<=n; ++i) {
            cin>>qu[i].xi>>qu[i].xa>>qu[i].yi>>qu[i].ya ;
        }
        for(int i=1; i<=n; ++i) {
            cin>>po[i].x >>po[i].y;
            int cnt = 0;
            for(int j=1; j<=n; ++j) {
                if(po[i].x <=qu[j].xa&&po[i].x >=qu[j].xi&&po[i].y <=qu[j].ya &&po[i].y>=qu[j].yi) {
                    book[i][j]=1;
                    cnt++;
                }
            }
            du[i]=cnt;
        }
        for(int i=1; i<=n; ++i) {
            if(du[i]==1) {
                find(i);
            }
        }
        if(sum<n) {
            cout<<"None
    ";
        } else {
            for(int i=1; i<=n; ++i) {
                cout<<char(i-1+'A')<<" "<<ans[i]<<endl;
            }
        }
        return 0;
    }
    $$Life quad is quad fantastic!$$
  • 相关阅读:
    每日日报2020.12.1
    每日日报2020.11.30
    981. Time Based Key-Value Store
    1146. Snapshot Array
    565. Array Nesting
    79. Word Search
    43. Multiply Strings
    Largest value of the expression
    1014. Best Sightseeing Pair
    562. Longest Line of Consecutive One in Matrix
  • 原文地址:https://www.cnblogs.com/pyyyyyy/p/10707230.html
Copyright © 2011-2022 走看看