生活随笔
收集整理的這篇文章主要介紹了
糊涂的教授
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
陳教授是一個國際知名的教授,很多單位都爭先恐后邀請他演講,今天下午陳教授就要做一個非常重要的演講。由于陳教授年紀大了,對于一些不重要的小事情有點糊涂,今天上午他把自己做演講要用的幻燈片隨便堆放在一起。因此,演講之前他不得不去整理這些幻燈片。由于時間很緊,他希望盡可能簡單地完成它。情況是這樣,陳教授這次演講一共要用 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\n",i+'A'-1,ans[i]);} else printf("None");fclose(stdin);fclose(stdout);return 0;
}
轉載于:https://www.cnblogs.com/YYC-0304/p/11094931.html
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的糊涂的教授的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。