2022-05-29:为了不断提高用户使用的体验,开发团队正在对产品进行全方位的开发和优化。 已知开发团队共有若干名成员,skills[i] 表示第 i 名开发人员掌握技能列表。 如果两名成员各自拥有
2022-05-29:为了不断提高用户使用的体验,开发团队正在对产品进行全方位的开发和优化。
已知开发团队共有若干名成员,skills[i] 表示第 i 名开发人员掌握技能列表。
如果两名成员各自拥有至少一门对方未拥有的技能,则这两名成员可以「合作开发」。
请返回当前有多少对开发成员满足「合作开发」的条件。
由于答案可能很大,请你返回答案对 10^9 + 7 取余的结果。
来自银联编程比赛。
答案2022-05-29:
总数-不合法的=合法的。
位运算。
代码用rust编写。代码如下:
use std::collections::HashMap;
fn main() {
let mut arr: Vec<Vec<isize>> = vec![vec![1, 2, 3], vec![3], vec![2, 4]];
let ans = coop_develop(&mut arr);
println!("ans = {}", ans);
}
fn coop_develop(skills: &mut Vec<Vec<isize>>) -> isize {
const MOD: isize = 1000000007;
let n = skills.len() as isize;
// key : 子集
// value : 个数
let mut no_full_sets_nums: HashMap<isize, isize> = HashMap::new();
for people in skills.iter_mut() {
fill_no_full_map(people, 0, 0, true, &mut no_full_sets_nums);
}
let mut cnts_nums: HashMap<isize, isize> = HashMap::new();
let mut minus: isize = 0;
for people in skills.iter_mut() {
let mut status: isize = 0;
for skill in people {
status = (status << 10) | *skill;
}
minus += if no_full_sets_nums.contains_key(&status) {
*no_full_sets_nums.get(&status).unwrap()
} else {
0
};
minus += if cnts_nums.contains_key(&status) {
*cnts_nums.get(&status).unwrap()
} else {
0
};
cnts_nums.insert(
status,
if cnts_nums.contains_key(&status) {
*cnts_nums.get(&status).unwrap()
} else {
0
} + 1,
);
}
let ans = n * (n - 1) / 2;
return (ans - minus) % MOD;
}
fn fill_no_full_map(
people: &mut Vec<isize>,
i: isize,
status: isize,
full: bool,
no_full_sets_nums: &mut HashMap<isize, isize>,
) {
if i == people.len() as isize {
if !full {
no_full_sets_nums.insert(
status,
if no_full_sets_nums.contains_key(&status) {
*no_full_sets_nums.get(&status).unwrap()
} else {
0
} + 1,
);
}
} else {
fill_no_full_map(people, i + 1, status, false, no_full_sets_nums);
fill_no_full_map(
people,
i + 1,
(status << 10) | people[i as usize],
full,
no_full_sets_nums,
);
}
}
执行结果如下:

2022-05-29:为了不断提高用户使用的体验,开发团队正在对产品进行全方位的开发和优化。 已知开发团队共有若干名成员,skills[i] 表示第 i 名开发人员掌握技能列表。 如果两名成员各自拥有的更多相关文章
- 项目Beta冲刺(团队)——05.29(7/7)
项目Beta冲刺(团队)--05.29(7/7) 格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Beta冲刺(团队) 团队名称:为了交项目干杯 作业目标:记录Beta敏捷冲刺第7 ...
- Java开发人员必须掌握的两个Linux魔法工具(四)
子曰:"工欲善其事,必先利其器." 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣) ...
- Facebook有两名重要经理离职 有一位将加入阿里
据报道,Facebook将有两名重要经理离职,分别是领导视频广告产品的产品经理和企业沟通团队经理. 这是该仍在迅速增长的公司最新的人员离职情况.Facebook计划今年大幅扩张人员规模. 知情人士称, ...
- 3.实现一个名为Person的类和它的子类Employee,Employee有两个子类Faculty 和Staff。
23.实现一个名为Person的类和它的子类Employee,Employee有两个子类Faculty 和Staff. 具体要求如下: (1)Person类中的属性有:姓名name(String类型) ...
- Week08_day01 (Hive开窗函数 row_number()的使用 (求出所有薪水前两名的部门))
数据准备: 7369,SMITH,CLERK,7902,1980-12-17,800,null,20 7499,ALLEN,SALESMAN,7698,1981-02-20,1600,300,30 7 ...
- NX二次开发-UFUN已知两个向量方向求夹角角度UF_VEC3_angle_between
NX9+VS2012 #include <uf.h> #include <uf_ui.h> #include <uf_vec.h> #include <uf_ ...
- 斗牛app上架应用宝、牛牛手机游戏推广、百人牛牛app应用开发、棋牌游戏上传、手游APP优化
联系QQ:305-710439斗牛app上架应用宝.牛牛手机游戏推广.百人牛牛app应用开发.棋牌游戏上传.手游APP优化 iOS开发iPhone/iPad平台安卓手机软件开发机型覆盖范围 超过113 ...
- [敏捷开发实践](2) 用于开发和维持复杂产品的敏捷开发框架Scrum
[敏捷开发实践](2) 用于开发和维持复杂产品的敏捷开发框架Scrum 1,Scrum概述 上篇中提到敏捷开发有两种主流的方法,一个是XP,另一个是Scrum,本篇简要介绍Scrum方法.Scrum是 ...
- 看好腾讯,鄙视百度(腾讯的核心竞争力,不是超过10亿的QQ的注册用户,也不是某一项产品、技术方面优势,而是“耐心”:懂得在合适的时间推出合适的产品。”)
百度,自始至终只是一个低劣的模仿者,且一切向前看,完全违背了一个搜索引擎所应该遵循的基本原则.谁给的钱多就能搜着谁,这跟贩毒有什么区别? 腾讯也在模仿别人,但是,它是模仿然后超越.在中国互联网发展历史 ...
- 如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
一夜之间,微信小程序刷爆了行业网站和朋友圈,小程序真的能如张小龙所说让用户"即用即走"吗? 其功能能和动辄几十兆安装文件的APP相比吗? 开发小程序,是不是意味着移动应用开发的一次 ...
随机推荐
- 定制centos发行版
//轻量级Centos定制发行版==================================================================================== ...
- appium之元素定位方法
做App UI自动化的时候,appium使用最频繁的应该就是定位元素了. Appium常用的元素属性值: resource-id:resource-id属性一般ID是唯一的,如果元素中有ID的话,优先 ...
- GitHub远程仓库与本地仓库链接问题
git clone ...时,Failed to connect to 127.0.0.1 port 1080: Connection refused 步骤1------git查看: 查询动态代理 g ...
- 配置环境变量在history中显示时间
1.1.临时显示(断电丢失) 配置变量HISTTIMEFORMAT,加入"%F %T ". 示例: [root@CentOS8 ~]# HISTTIMEFORMAT='%F %T ...
- DRF的视图与路由集Routers
一 视图 Django REST framwork 提供的视图的主要作用: 控制序列化器的执行(检验.保存.转换数据) 控制数据库模型的操作 一 普通视图APIView 一 两个视图基类 1 APIV ...
- vulnhub靶场之MOMENTUM: 1
准备: 攻击机:虚拟机kali.本机win10. 靶机:Momentum: 1,下载地址:https://download.vulnhub.com/momentum/Momentum.ova,下载后直 ...
- Flutter 2 渲染原理和如何实现视频渲染
7 月 17 日下午,在前端专场巡回沙龙北京站中,声网Agora跨平台开发工程师卢旭辉带来了<Flutter2 渲染原理和如何实现视频渲染>的主题分享,本文是对演讲内容的整理. 本次分享主 ...
- 《golong入门教程📚》,从零开始入门❤️(建议收藏⭐️)
Go语言学习笔记 本菜鸟的Go语言学习笔记,历时1个月,包含了Go语言大部分的基本语法(不敢说全部),学习期间参考了各种视频,阅读了各种文章,主要参考名单如下: 点击跳转到参考名单<( ̄︶ ̄)& ...
- 磁盘IO 基本常识
计算机硬件性能在过去十年间的发展普遍遵循摩尔定律,通用计算机的 CPU主频早已超过3GHz,内存也进入了普及DDR4的时代.然而传统硬盘虽然在存储容量上增长迅速,但是在读写性能上并无明显提升,同时SS ...
- Go语言:利用 TDD 逐步为一个字典应用创建完整的 CRUD API
前言 在数组这一章节中,我们学会了如何按顺序存储值.现在,我们再来看看如何通过键存储值,并快速查找它们. Maps 允许你以类似于字典的方式存储值.你可以将键视为单词,将值视为定义. 所以,难道还有比 ...