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的更多相关文章
随机推荐
- DOM操作 、js获取id的内容 和修改原来的内容(innerHTML)
js获取id的内容(getElementById) 和修改原来的内容(innerHTML) 1.通过ID获取元素 学过HTML/CSS样式,都知道,网页由标签将信息组织起来,而标签的id属性值是唯一的 ...
- soket通信
import socket #socket采用cs结构,client and Server B/S browser and server sock = socket.socket(socket.AF_ ...
- C++中的函数重载分析(二)
1,重载与指针: 1,下面的函数指针将保存哪个函数的地址? int func(int x) { return x; } int func(int a, int b) { return a + b; } ...
- mybatis默认的数据源连接池(PooledDataSource和UnPooledDataSource)
一般情况下我们操作数据库都是通过connection,但是频繁创建和删除connection会严重影响效率,因此在这种情况下我们一般会用到连接池,因为项目中用到的是mybatis,所以了解一下myba ...
- VINS 检测回环辅助激光建图
最近接到一个任务,在激光检测回环失败时,比如黑色物体多,场景大等,可否利用视觉进行回环检测.如果只是检测回环,现有的许多框架都可以使用.ORB-SLAM本身就有单目模式,且效果不错.但是发现ORB在检 ...
- js的this、bind、call、apply个人领悟
this 1.非箭头函数: 如果是该函数是一个构造函数,this指针指向一个新的对象 在严格模式下的函数调用下,this指向undefined 如果是该函数是一个对象的方法,则它的this指针指向这个 ...
- .NET Core TDD 前传: 编写易于测试的代码 一 -- 缝
转载于: https://www.cnblogs.com/cgzl/p/9365955.html 有时候不是我们不想做单元测试, 而是这代码写的实在是没法测试.... 举个例子, 如果一辆汽车在产出后 ...
- 基于QRcode的带有文字+图片的二维码的Vue组件
1 <template> 2 <!-- 生成二维码开放接口: 3 二维码内容[通常为url] 4 二维码大小[限制为正方形] 二维码下方显示:文字 5 二维码中间显示:图片--> ...
- PHP 接口签名验证
目录 概览 常用验证 单向散列加密 对称加密 非对称加密 密钥安全管理 接口调试工具 在线接口文档 扩展 小结 概览 工作中,我们时刻都会和接口打交道,有的是调取他人的接口,有的是为他人提供接口,在这 ...
- 虚拟机复制的linux无法联网,解决Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization.
一.问题描述 OS:centos 原因是拷贝虚拟机造成的. 使用vmworkstation打开虚拟机的时候,要选择copy而非move. 二.解决描述 网络上解决步骤各异,其实就一句话.只要保证vmw ...