题目
有M个面试官,每个面试官熟悉的编程语言是一个列表,比如[“Java”, “C++”, “Golang”]表示该面试官熟悉Java、C++和Golang三种语言。
有N个面试者,按照面试者的机试选择的语言分配面试官进行面试。现在给定每个面试官最多面试x个人,每个面试者必须被不同的面试官面试2次,请问能否给出一个匹配使得所有的面试者都能被面试到。输入
第一行输入3个整数,M,N,x。其中0<=M<=100,0<=N<=1000
然后是M行,输入M个面试官熟悉的语言列表,多个语言之间以空格分割,语言字符串本身不存在空格
然后是N行,输入N个面试者的机试所使用的语言。输出
第一行输出字符串true或者false,表示能否匹配。
如果能匹配,从第二行起输出一个二维数组match,如果第i个面试官面试第j个面试者,match[i][j]== 1,否则match[i][j]==0。二维数组元素之间采用单个空格分割。如果有多种匹配,只需要输出其中一种正确的匹配即可样例1
输入:4 6 4
Java C++ Python
Python
C++ Java
Python
Java
Python
C++
Python
C++
Java输出:true
1 0 1 0 1 1
0 1 0 1 0 0
1 0 1 0 1 1
0 1 0 1 0 0

本题采用的是回溯算法,代码(Python):

M,N,x = map(int,input().split(' '))
interviewer = []
interviewee = []
if M<0 or M>100 or N<0 or N>1000:print('false')exit()
for i in range(M):interviewer.append(input().split(' '))
for i in range(N):interviewee.append(input().split(' '))
#构造两个M*N的全0的矩阵,save用来存储面试官和面试者语音相匹配的矩阵,
# save[i][j] = 1表示 i 面试官可以面试 j 面试者, 相反save[i][j] = 0表示 i 面试官与 j 面试者语言不匹配
save = [[0 for i in range(N)] for j in range(M)]
#match矩阵用来输出满足每个面试官最多面试x个人,每个面试者必须被不同的面试官面试2次的结果
match = [[0 for i in range(N)] for j in range(M)]for i in range(M):for j in range(N):if interviewee[j][0] in interviewer[i]:save[i][j] = 1
#判断是否满足面试安排的条件
def isAccord(match,save,col,i,j,x):#save[i][col]、save[j][col]不都是1直接返回Falseif save[i][col] != 1 or save[j][col] != 1:return False#分别统计match数组i、j两行1的数量,判断i、j两行是否满足,每个面试官最多面试x个人sum_1 = sum(match[i])sum_2 = sum(match[j])#每个面试者被面试两次,因此在match[i][col]、match[j][col]赋值为1前,col列的和必须为0sum_col = sum(match[i][col] for i in range(len(match)))if sum_1 <x and sum_2<x and sum_col==0:return Trueelse:return Falseclass solution:def get_res(self):self.res = []self.flag = Falseself.backtrack(match, save, 0, x)return self.resdef backtrack(self,match,save,col,x):if col==len(match[0]):self.flag = Trueself.res = matchreturnfor i in range(len(save)):for j in range(i+1,len(save)):#不满足条件直接下一次循环,满足条件match[i][col]、match[j][col]赋值为1if isAccord(match,save,col,i,j,x)==False:continuematch[i][col] = 1match[j][col] = 1#递归col+1列self.backtrack(match,save,col+1,x)#不满足条件,回溯if self.flag == False:match[i][col] = 0match[j][col] = 0
result = solution().get_res()
#格式化输出矩阵
if len(result)>0:print('true')for s in result:print(' '.join(str(i) for i in s))
else:print('false')

输出结果:

【华为笔试】安排面试官。有M个面试官,每个面试官熟悉的编程语言是一个列表,有N个面试者,按照面试者的机试选择的语言分配面试官进行面试(Python)相关推荐

  1. 北理计算机考研机试,北理工计算机2000-2010考研机试题目c语言实现.doc

    北理工计算机2000-2010考研机试题目c语言实现 北理工计算机2000-2010考研机试题目c语言实现1.进制转换#include #include //#include #include #in ...

  2. 华为软件机试测试题C语言,华为软件测试面试经验

    面试过程: 网申,然后会收到测评通知,按平时表现做测评,没啥难度,就是花些时间做题.过几天后会统一安排时间机试,开摄像头在自己笔记本上做就好.这些都怎么不刷人.编程题1道简单的,一道复杂一些的,从题库 ...

  3. 华为OD机试2023年最新题库(JAVA、Python、C++)

    我是一名软件开发培训机构老师,我的学生已经有上百人通过了华为OD机试,学生们每次考完试,会把题目拿出来一起交流分享. 2023年5月份题库已经更新为OD统一考试(B卷),题库由三部分组成: 1.202 ...

  4. 【华为OD机试 2023】 字符串解密(C++ Java JavaScript Python)

    华为od机试共有3道题,分值为100+100+200,总分为400分.时间限制为150分钟或3个小时..每道题目都需要通过测试用例来得分,全通过则为满分.华为od机试是在牛客网上进行的,采用ACM模式 ...

  5. 【华为OD机试 】 免单统计(C++ Java JavaScript Python)

    华为od机试共有3道题,分值为100+100+200,总分为400分.考试时间 2.5h..每道题目都需要通过测试用例来得分,全通过则为满分.华为od机试是在牛客网上进行的,采用ACM模式.华为od机 ...

  6. 【华为OD机试真题】网上商城优惠活动(python版)100%通过率 超详细代码注释 代码解读

    [华为OD机试真题 2022&2023]真题目录 @点这里@ [华为OD机试真题]信号发射和接收 &试读& @点这里@ [华为OD机试真题]租车骑绿道 &试读& ...

  7. 【独家】华为OD机试提供C语言题解 - 字母计数

    最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单 华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典 [华为OD机试]全流程解析+经验分享,题型分 ...

  8. 【华为OD机试 2023】 数组合并(C++ Java JavaScript Python)

    文章目录 题目描述 输入描述 输出描述 用例 C++ JavaScript Java Python 题目描述 现在有多组整数数组,需要将他们合并成一个新的数组. 合并规则: 从每个数组里按顺序取出固定 ...

  9. 【华为OD机试 2023】货币单位换算(C++ Java JavaScript Python)

    文章目录 题目描述 输入描述 输出描述 用例 题目解析 C++ JavaScript Java Python 题目描述 记账本上记录了若干条多国货币金额,需要转换成人民币分(fen),汇总后输出. 每 ...

最新文章

  1. 第13章代码《跟老男孩学习Linux运维:Shell编程实战》
  2. 安装eclipse for c/c++环境
  3. StringBuider 的效率一定高吗?要看你怎么使用
  4. 电脑模拟器哪个好_《英雄聯盟:激鬥峽谷》电脑版哪个安卓模拟器好用?《英雄聯盟:激鬥峽谷》手游电脑版怎么玩...
  5. 细说反射,Java 和 Android 开发者必须跨越的坎
  6. 通过案例学调优之--SQL Profile
  7. CG CTF WEB 密码重置2
  8. xampp中apache不能启动解决方法 (share)
  9. 学成在线--7.CMS页面管理开发(异常处理)
  10. 十年积累,5.4万GitHub Star一朝清零:开源史上最大意外损失
  11. C++设计模式-开放-封闭原则基本概念与实例
  12. oss上传报错_layui+oss阿里云附件上传回调报错问题
  13. 2篇word文档比较重复率_【软件】PDF转word黑科技 快来get!
  14. iOS:tintColor详解
  15. PCA主成分分析/LDA线性判别分析/CCA典型相关分析 对比
  16. 研大考研:2015考研政治认识论知识点
  17. access如何设置定期报表汇总_Access如何制作复杂报表
  18. 华为中标肯尼亚蒙内铁路项目 提供面向未来的运营通信网络
  19. 论文的系统 排版软件Latex
  20. 【技术类】【ArcGIS对国产卫星的支持2:高分一号卫星】篇9、动态影像服务发布

热门文章

  1. java验证电子邮件_Java字符串中电子邮件的简单易懂的验证
  2. matplotlib.pyplot.figure()结构及用法详解
  3. python自动粘贴文字_在python中自动将文件内容复制到剪贴板并粘贴到纯文本文件中...
  4. 中华传统草药大全 v1.0 官方
  5. php thumbs.db,禁止thumbs.db自动生成的方法
  6. 潜在语义索引SEO,网站关键词挖掘工具
  7. Nginx(proxy_pass代理转发详解)
  8. AndroidStudio——DevEco
  9. SSL P2151 西行寺幽幽子___高精度
  10. XMUT第七届蓝桥杯全国软件和信息技术专业人才大赛校内选拔赛模拟赛