最大线性无关组-混合颜料
题目描述
用正整数表示不同颜色的颜料。这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能保证能供应所有颜色的颜料,所以你需要自己混合一些颜料。混合两种不一样的颜色A和颜色B颜料可以产生(A XOR B)这种颜色的颜料(新产生的颜料也可以用作继续混合产生新的颜色,XOR表示异或操作)。最少需要购买几种颜色的颜料?
思路:一个数字代表一种颜料,可以用32位二进制数表示。那么问题求解矩阵的秩,即寻找可以表示所有行的矩阵的基。
容易有以下推论:
初始化,基的集合为各个数的二进制表示,如果最大的两个数a和b,它们最高位1所在位置相同,那么可以异或出更小的数字c,即最大的那个数a可以由更小的两个基合成,这里如果c不在基的集合中,那么加入到集合中;如果最大的两个数最高位1所在位置不同,那么异或后最高位1和a一致,即不能产生新的更小的基,那么此时最大的数a必须单独作为一个基。res++
每一轮操作后,需要删除最大的数,因为无论是否最大的数是合成产生还是单独的基,其已经讨论过了
最后的答案是 res(那些需要单独成为一个基的数量)+最终基的集合的大小
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;int fun(int a) //获得最高位1的位置
{int ans=0;while(a){ans++;a=a>>1;}return ans;
}int main()
{int n;vector<int> colors;while(cin>>n){int temp;int res=0;int i=n;colors.clear(); //colors表示当前基的集合 初始化为所有数字的二进制表示while(i--){cin>>temp;colors.push_back(temp);}sort(colors.begin(),colors.end());int endValue=n-1;int cmpValue=endValue-1;//从最大的两个数开始 因为0异或0只能也为0 而最高位1相等才可能异或出低位while(colors.size()>2){//只有最高位1所在位置相同,才可能异或出低位置if(fun(colors[endValue])==fun(colors[cmpValue])){int temp=colors[endValue]^colors[cmpValue];//异或出更小的数(基)if(find(colors.begin(),colors.end(),temp)==colors.end()){colors.push_back(temp);//产生新的配方sort(colors.begin(),colors.end());endValue++;cmpValue++;}}else //那么最高位只能单独购买调料{res++;//那么最大的那个数一定需要单独购买配料 并且它不能和其它数产生可用配料}colors.pop_back(); //最大的那个 或者由更小的基合成 或者单独为基 讨论完成endValue=cmpValue;cmpValue--;}cout<<res+colors.size()<<endl;}}
最大线性无关组-混合颜料相关推荐
- 网易笔试——混合颜料
你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料.为了让问题简单,我们用正整数表示不同颜色的颜料.你知道这幅画需要的n种颜色的颜 料,你现在可以去商店购买一些颜料,但是商店不能保证能供 ...
- 混合颜料-python
题目描述 你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料.为了让问题简单,我们用正整数表示不同颜色的颜料.你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能 ...
- 【运筹学】线性规划问题的解 ( 可行解 | 可行域 | 最优解 | 秩的概念 | 极大线性无关组 | 向量秩 | 矩阵秩 | 基 | 基变量 | 非基变量 | 基解 | 基可行解 | 可行基 )
文章目录 I . 线性规划问题解 II . 可行解 与 可行域 III . 最优解 IV . 秩 的 概念 V . 基 的概念 VI . 基变量 与 非基变量 VII . 基解 VIII . 基可行解 ...
- 再理解:零空间、行空间、列空间、左零空间、基础解系、极大线性无关组、齐次解、非齐次解之间的关系
再理解:零空间.行空间.列空间.左零空间.基础解系.极大线性无关组.齐次解.非齐次解之间的关系 1.再理解:零空间.行空间.列空间.左零空间.基础解系.极大线性无关组.齐次解.非齐次解之间的关系 1. ...
- 向量组秩及其极大线性无关组求解浅析
向量组秩和极大线性无关组求解 问题来源阐述 线性代数课程中,在学习了向量组的线性相关性和向量组的秩后,一类常见的计算问题是给出向量组,求解其秩和极大线性无关组.课程中一般给出的方法都是以向量为列组成矩 ...
- 2017校招-混合颜料
题目描述 2017校招-混合颜料 你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料.为了让问题简单,我们用正整数表示不同颜色的颜料.你知道这幅画需要的n种颜色的颜料,你现在可以去商店购 ...
- (邱维声)高等代数课程笔记:极大线性无关组,向量组的秩
极大线性无关组,向量组的秩 \quad 一般地,设 V V V 是数域 K K K 上的一个线性空间, α 1 , α 2 , ⋯ , α s ∈ V \boldsymbol{\alpha}_{1}, ...
- Matlab 矩阵分析(一) 矩阵的秩,极大线性无关组和基
Matlab 矩阵分析(一) 矩阵的秩和极大线性无关组 r = rank(A) 计算矩阵的秩 A 是矩阵 [R,j]=rref(A) 计算行最简 R是矩阵的行最简矩阵,j是矩阵的极大线性无关组的列数 ...
- 线性代数【四】:向量(1):线性相关及其判别,极大线性无关组,等价向量组
本节为线性代数复习笔记的第二部分,矩阵的概念与计算(1),主要包括:线性相关的概念,五个判别定理,极大线性无关组和等价向量组. 1. 线性相关 对m个n维向量α1⃗,α2⃗,...,αm⃗\vec ...
最新文章
- 基尼不纯度简介 - Gini Impurity
- Windows Server下DB2自动备份、复原和前滚的脚本编程
- python pymysql
- 判断某个点是否在不规则图形内
- jdbc mysql - Column count doesn't match value count at row 1.
- 深入Java虚拟机:Class文件实例解析
- java连接摄像头_Java实现 海康摄像头抓拍图像(示例代码)
- android shell检查是否锁屏_android打开关闭屏幕
- (49)VHDL实现8位奇偶校验电路(while loop语句)
- 广电总局拟规定设立未成年人频道
- 如何做实时监控?—— 参考 Spring Boot 实现
- MySQL给查询结果添加一表表示行号或名次(1)
- WIN32API之常用进程、线程函数
- STM8S项目创建(STVD创建)---使用 COSMIC 创建 C 语言项目
- ios苹果应用ipa一键签名工具_win和Mac电脑端自行签名ipa教程
- 博主的EMNLP2021合作工作已公开:TransPrompt——基于Prompt和迁移学习的小样本文本分类,欢迎阅读与引用
- 市场上提供源码的商城系统有哪些?
- 斗鱼实名认证 mysql_斗鱼怎么进行实名认证_斗鱼实名认证方法教程-游戏窝
- 汇编——dosbox的debug常用指令
- CityEngine -俯视图