题目描述
用正整数表示不同颜色的颜料。这幅画需要的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;}}

最大线性无关组-混合颜料相关推荐

  1. 网易笔试——混合颜料

    你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料.为了让问题简单,我们用正整数表示不同颜色的颜料.你知道这幅画需要的n种颜色的颜 料,你现在可以去商店购买一些颜料,但是商店不能保证能供 ...

  2. 混合颜料-python

    题目描述 你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料.为了让问题简单,我们用正整数表示不同颜色的颜料.你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能 ...

  3. 【运筹学】线性规划问题的解 ( 可行解 | 可行域 | 最优解 | 秩的概念 | 极大线性无关组 | 向量秩 | 矩阵秩 | 基 | 基变量 | 非基变量 | 基解 | 基可行解 | 可行基 )

    文章目录 I . 线性规划问题解 II . 可行解 与 可行域 III . 最优解 IV . 秩 的 概念 V . 基 的概念 VI . 基变量 与 非基变量 VII . 基解 VIII . 基可行解 ...

  4. 再理解:零空间、行空间、列空间、左零空间、基础解系、极大线性无关组、齐次解、非齐次解之间的关系

    再理解:零空间.行空间.列空间.左零空间.基础解系.极大线性无关组.齐次解.非齐次解之间的关系 1.再理解:零空间.行空间.列空间.左零空间.基础解系.极大线性无关组.齐次解.非齐次解之间的关系 1. ...

  5. 向量组秩及其极大线性无关组求解浅析

    向量组秩和极大线性无关组求解 问题来源阐述 线性代数课程中,在学习了向量组的线性相关性和向量组的秩后,一类常见的计算问题是给出向量组,求解其秩和极大线性无关组.课程中一般给出的方法都是以向量为列组成矩 ...

  6. 2017校招-混合颜料

    题目描述 2017校招-混合颜料 你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料.为了让问题简单,我们用正整数表示不同颜色的颜料.你知道这幅画需要的n种颜色的颜料,你现在可以去商店购 ...

  7. (邱维声)高等代数课程笔记:极大线性无关组,向量组的秩

    极大线性无关组,向量组的秩 \quad 一般地,设 V V V 是数域 K K K 上的一个线性空间, α 1 , α 2 , ⋯ , α s ∈ V \boldsymbol{\alpha}_{1}, ...

  8. Matlab 矩阵分析(一) 矩阵的秩,极大线性无关组和基

    Matlab 矩阵分析(一) 矩阵的秩和极大线性无关组 r = rank(A) 计算矩阵的秩 A 是矩阵 [R,j]=rref(A) 计算行最简 R是矩阵的行最简矩阵,j是矩阵的极大线性无关组的列数 ...

  9. 线性代数【四】:向量(1):线性相关及其判别,极大线性无关组,等价向量组

    本节为线性代数复习笔记的第二部分,矩阵的概念与计算(1),主要包括:线性相关的概念,五个判别定理,极大线性无关组和等价向量组. 1. 线性相关   对m个n维向量α1⃗,α2⃗,...,αm⃗\vec ...

最新文章

  1. 基尼不纯度简介 - Gini Impurity
  2. Windows Server下DB2自动备份、复原和前滚的脚本编程
  3. python pymysql
  4. 判断某个点是否在不规则图形内
  5. jdbc mysql - Column count doesn't match value count at row 1.
  6. 深入Java虚拟机:Class文件实例解析
  7. java连接摄像头_Java实现 海康摄像头抓拍图像(示例代码)
  8. android shell检查是否锁屏_android打开关闭屏幕
  9. (49)VHDL实现8位奇偶校验电路(while loop语句)
  10. 广电总局拟规定设立未成年人频道
  11. 如何做实时监控?—— 参考 Spring Boot 实现
  12. MySQL给查询结果添加一表表示行号或名次(1)
  13. WIN32API之常用进程、线程函数
  14. STM8S项目创建(STVD创建)---使用 COSMIC 创建 C 语言项目
  15. ios苹果应用ipa一键签名工具_win和Mac电脑端自行签名ipa教程
  16. 博主的EMNLP2021合作工作已公开:TransPrompt——基于Prompt和迁移学习的小样本文本分类,欢迎阅读与引用
  17. 市场上提供源码的商城系统有哪些?
  18. 斗鱼实名认证 mysql_斗鱼怎么进行实名认证_斗鱼实名认证方法教程-游戏窝
  19. 汇编——dosbox的debug常用指令
  20. CityEngine -俯视图

热门文章

  1. 学习笔记----SLAM的概论与架构
  2. 视觉识别示例-海康威视
  3. 使用kettle采集excel表格中的数据
  4. python教程学习
  5. 利用mxnet生成rec文件(图像分类)
  6. 华硕P8Z77-V LX老主板转换卡升级NVMe M2硬盘经验,老主机的福音,质的飞跃
  7. 带领初学者学习 SQL 数据库编程视频教程(11 个视频)
  8. sql server 发布订阅
  9. 用C语言计算个人所得税
  10. 火山PC_sqlserver数据库的操作