栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

acw-3746.牛的学术圈

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

acw-3746.牛的学术圈

题目链接https://www.acwing.com/problem/content/3749/分析:

  • 列表按每名实验室成员对这篇文章的贡献降序排列。
  • 如果多名研究员的贡献相等,则按字典序排列。
  • 由于更有资历的实验室成员负有更多的管理责任,更有资历的研究员从不会比资历较浅的研究员做出更多的贡献。

由以上三条进行推论

  1. 名字在前面,贡献越多
  2. 如果多名研究员的贡献相等,按字典序排列,这导致了按字典序排列的我们不能推断出他们的贡献大小,反过来说,如果排在前面的研究员名字的字典序大于他后面的,则可以确定他的贡献比他后面的研究员贡献要大
  3. 贡献越大的研究员资历越浅

举例说明:

假设成员A,B,C,D,E,F对这篇文章的贡献降序排列为:

A        B        D        C        F        E

可以得出以下结论:

  • D一定比C E F的贡献大,F一定比E的贡献大
  • A B D 一定比C E F 贡献大,A B D C F 一定比 E 贡献大
  • A B D 一定比C E F 资历浅,A B D C F 一定比 E 资历浅

推论:下降字典序后面所有人比前面所有人贡献小且资历深

输出格式

输出 N 行,每行 N 个字符。在第 i 行内,对于所有 j≠i,当可以确定第 i 名成员比第 j 名成员资历更深时字符 j 为 1,当可以确定第 i 名成员比第 j 名成员资历更浅时字符 j 为 0,当不能由给定的出版物确定时为 ?。

第 i 行的字符 i 应为 B,因为这是 Bessie 最喜欢的字母。

分析输出格式可得,有几个研究员我们就输出几行,第 i 行输出第 i 个人除他自己外和其他人的资历比较结果,资历更深输出1,更浅输出0 ,不确定输出?,同行第 i 个位置因为没有与人比较,所以输出B

输入

1 6
a b c d e f
a b d c f e

输出

B?0?00
?B0?00
11B10?
??0B00
1111B1
11?10B

unordered_map - C++ Referencehttp://www.cplusplus.com/reference/unordered_map/unordered_map/代码:

#include
#include
#include
using namespace std;

const int N=110;
char ord[N][N];		//存储i条记录得到的结果 
string record[N];	//贡献记录 
unordered_map researcher;	//研究员 

int main()
{
	int k,n;	//n个研究员,k条记录 
	cin>>k>>n;
	
	for(int i=1;i<=n;i++)
	{
		string name;
		cin>>name;
		researcher[name]=i;	//名字为name的研究员是我们的第i位研究员
							//方便之后的操作 
	}
	
	//一些初始化操作 
	memset(ord,'?',sizeof ord);
	for(int i=1;i<=n;i++) ord[i][i]='B';
	
	//开始分析记录
	while(k--)
	{
		for(int i=1,r=1;i<=n;i++)	//r为要更新序列的后一个 
		{
			cin>>record[i];
			//找到一个降序的字典序,若找到,更新ord数组
			if(record[i-1]>record[i])
				r=i;
			int s = researcher[record[i]];	//s表示降序的那个人 
			//更新,r及r之后的都比之前的贡献小,资历深 
			for(int j=1;j 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879369.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号