AcWing 3746. 牛的学术圈 II(思维题)
创始人
2025-05-29 20:54:11

【题目描述】
Bessie正在申请计算机科学的研究生,并取得了一所久负盛名的计算机科学实验室的面试通知。
然而,为了避免冒犯任何人,Bessie有意先确定实验室的NNN名现有成员的相对资历。
没有两名实验室成员的资历相同,但确定他们的资历深浅可能并不好办。
为此,Bessie将会对实验室的出版物进行调查。
每份出版物均包含一个作者列表,为所有NNN名实验室成员的一个排列。
列表按每名实验室成员对这篇文章的贡献降序排列。
如果多名研究员的贡献相等,则按字典序排列。
由于更有资历的实验室成员负有更多的管理责任,更有资历的研究员从不会比资历较浅的研究员做出更多的贡献。
例如,在一个由资历较浅的学生Elsie、资历较深的教授Mildred、以及十分资深的教授Dean组成的实验室中,可能存在一篇论文Elsie-Mildred-Dean,如果他们做出了不等的贡献(也就是说,Elsie做出的贡献比Mildred更多,Mildred比Dean更多)。
然而,也有可能存在一篇论文Elsie-Dean-Mildred,如果Mildred和Dean做出了相等的贡献,而Elsie做出了更多的贡献。
给定实验室的KKK份出版物,对于实验室中每对研究员,如果可能的话帮助Bessie判断其中谁的资历更深。

【输入格式】
输入的第一行包含两个整数KKK和NNN。
第二行包含NNN个空格分隔的字符串,为实验室的成员的名字。每个字符串均由小写字母组成,且至多包含101010个字符。
以下KKK行,每行包含NNN个空格分隔的字符串,表示一份出版物的作者列表。

【输出格式】
输出NNN行,每行NNN个字符。在第iii行内,对于所有j≠ij≠ij=i,当可以确定第iii名成员比第jjj名成员资历更深时字符jjj为111,当可以确定第iii名成员比第jjj名成员资历更浅时字符jjj为000,当不能由给定的出版物确定时为?
第iii行的字符iii应为B,因为这是Bessie最喜欢的字母。

【数据范围】
1≤N,K≤1001≤N,K≤1001≤N,K≤100

【输入样例1】

1 3
dean elsie mildred
elsie mildred dean

【输出样例1】

B11
0B?
0?B

【样例1解释】
在这个样例中,单独一份论文elsie-mildred-dean并不能提供足够的信息判断Elsie比Mildred资历更深或更浅。
然而,我们可以推断出Dean一定比这两名研究员资历更深,从而资历排序为Elsie

【输入样例2】

2 3
elsie mildred dean
elsie mildred dean
elsie dean mildred

【输出样例2】

B00
1B0
11B

【样例2解释】
在这个样例中,唯一能与两篇论文相一致的资历排序为Elsie

【分析】


假设aaa和bbb的资历分别为EaE_aEa​和EbE_bEb​,贡献分别为CaC_aCa​和CbC_bCb​,若能确定EaCbC_a>C_bCa​>Cb​,即在论文中aaa的名字出现在bbb的前面,且aaa到bbb之间的名字不是全按字典序升序排列。

因此我们可以遍历论文的每个名字iii,在iii的后面找到第一个字典序降序的名字jjj,那么jjj及其之后的所有人资历都严格高于iii。


【代码】

#include 
#include 
#include 
#include 
#include 
using namespace std;const int N = 110;
int g[N][N];//g[a][b] = 1表示a的资历比b高
int n, m;
unordered_map id;int main()
{cin >> m >> n;for (int i = 0; i < n; i++){string s;cin >> s;id[s] = i;}string name[N];while (m--){for (int i = 0; i < n; i++) cin >> name[i];for (int i = 0; i < n; i++){int j = i + 1;while (j < n && name[j] > name[j - 1]) j++;//找到第一个降序的名字while (j < n)//j之后的所有人资历都严格比i高{int a = id[name[i]], b = id[name[j]];g[b][a] = 1;j++;}}}for (int i = 0; i < n; i++){for (int j = 0; j < n; j++)if (i == j) cout << 'B';else if (!g[i][j] && !g[j][i]) cout << '?';else cout << g[i][j];cout << endl;}return 0;
}

相关内容

热门资讯

欧尔班败选 蒂萨党主席称赢得匈...   总台记者获悉,当地时间12日,蒂萨党主席毛焦尔·彼得称,在匈牙利国会选举中赢得胜利。  据悉,毛...
美国计划封锁霍尔木兹海峡,国际...   美国与伊朗结束在巴基斯坦的谈判且未达成协议,美国总统特朗普12日在社交媒体发文称美国海军将开始阻...
美伊谈判无果 韩国政府将维持“...   韩国总统府青瓦台12日说,由于美国和伊朗谈判未达成任何协议,韩国政府将维持当前的“应急模式”,以...
遇见中国|西班牙友人阿尔诺:中...   他们因向往而来到中国,因梦想而选择留下。当外国人“遇见中国”,究竟会碰撞出怎样的火花?总台环球资...
湖南省人大常委会原党组书记、副...   经中共中央批准,中央纪委国家监委对湖南省人大常委会原党组书记、副主任乌兰严重违纪违法问题进行了立...