ACM_ICPC_Team
题目:
There are a number of people who will be attending ACM-ICPC World Finals. Each of them may be well versed in a number of topics. Given a list of topics known by each attendee, you must determine the maximum number of topics a 2-person team can know. Also find out how many ways a team can be formed to know that many topics. Lists will be in the form of bit strings, where each string represents an attendee and each position in that string represents a field of knowledge, 1 if its a known field or 0 if not.
附上链接:ACM_ICPC_Team
初步想法
这题我初见想到的就是简单的三次循环遍历
for i in range(n):
for j in range(i + 1, n):
for k in range(m):
# 进行判断及计数等操作
虽然功能上一定可以实现,但是时间复杂度达到了O(n^2 * m)的地步,这显然不能满足要求
进阶解决
为了避免嵌套循环大量消耗时间,我改用itertools库中的combinations(list, num)函数,该函数可以根据给定的参数完成对给定列表的全组合,即数学上的C(num, len(list)),结果返回一个包含全部全组合的元组,于是最外层的两个循环备修改为如下代码:
for i in itertools.combinations(topic, 2):
即将列表topic中的每两个元素分别组合形成一个新元组,并对其进行遍历,就实现了之前的那两个外层循环同样的功能
而后对第三个循环的思考中我发现:
题目中已经给定的主函数中,传入的变量是一个元素为字符串形式的列表,而不是数值形式
这就又为我们解题提供了方便,将两者进行或操作并判断1的个数就简化为了下面这一句话:
count = str(bin(int(i[0], 2) | int(i[1], 2))).count('1')
其中int(***, 2)中的第二个参数2表示将字符串转换为二进制数字
最终程序
简化了上面的问题,这个题目也就没有难点了,下面附上我最终通过的代码
def acmTeam(topic):
combine = itertools.combinations(topic, 2)
max_num = 0
num = 1
for i in combine:
res = str(bin(int(i[0], 2) | int(i[1], 2)))
count = res.count('1')
if count > max_num:
max_num = count
num = 1
elif count == max_num:
num += 1
return max_num, num
ACM_ICPC_Team的更多相关文章
随机推荐
- Learning OSG programing---osgScribe
Learning OSG programing---osgScribe Scribe可以翻译为素描,抄写等.本例通过在模型表面添加一层素描,来显示模型的骨架. 关键代码: osg::ref_ptr&l ...
- 为什么要使用MQ和到底什么时候要使用MQ
一.缘起 一切脱离业务的架构设计与新技术引入都是耍流氓. 引入一个技术之前,首先应该解答的问题是,这个技术解决什么问题. 就像微服务分层架构之前,应该首先回答,为什么要引入微服务,微服务究竟解决什 ...
- luoguP3258 [JLOI2014]松鼠的新家 题解(树上差分)
P3258 [JLOI2014]松鼠的新家 题目 树上差分:树上差分总结 #include<iostream> #include<cstdlib> #include<c ...
- python文件的读写总结
读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...
- nginx之域名重定向
一般网站默认的访问端口为80,当多个域名指向同一个服务器IP时,可以nginx进行重定向,分别指向不同的目的地址或其他主机. 在nginx目录下的conf/vhost子目录下建两个conf文件,hos ...
- config maven in intellij IDEA
Config maven in IDEA File ->Settings->Build,Execution.Deployment->build Too ...
- vue自定义组件添加原生事件监听
注:全局或局部注册的组件称为子组件,其中声明的组件名称(如下demo中的child)是一个自定义组件 Demo1-直接给父组件添加事件监听 <!DOCTYPE html> <html ...
- 将word文档中的回车符进行删除
- 入门phantomjs
前言 phantomjs是一个无界面浏览器,用来操作web页面的一个工具,比如登录,提交表单等等. 语法框 //创建一个浏览器对象 var page = require('webpage').crea ...
- css3 序列帧动画抖动
页面需要一个动画,设计师给了动画的序列帧 项目由vue构建,使用css3做动画 html <div class="work_two_main"></div> ...