混合颜料
来源:互联网 发布:caxa软件 编辑:程序博客网 时间:2024/04/25 12:59
题目
你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料。为了让问题简单,我们用正整数表示不同颜色的颜料。你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能保证能供应所有颜色的颜料,所以你需要自己混合一些颜料。混合两种不一样的颜色A和颜色B颜料可以产生(A XOR B)这种颜色的颜料(新产生的颜料也可以用作继续混合产生新的颜色,XOR表示异或操作)。本着勤俭节约的精神,你想购买更少的颜料就满足要求,所以兼职程序员的你需要编程来计算出最少需要购买几种颜色的颜料?
输入描述:
第一行为绘制这幅画需要的颜色种数n (1 ≤ n ≤ 50)
第二行为n个数xi(1 ≤ xi ≤ 1,000,000,000),表示需要的各种颜料.
输出描述:
输出最少需要在商店购买的颜料颜色种数,注意可能购买的颜色不一定会使用在画中,只是为了产生新的颜色。
输入例子:
3
1 7 3
输出例子:
3
解答
这道题乍看晕晕的。其实把每个数都看作是一行2进制数,那n个数就是一个n行m列的矩阵,m取决于颜色编号的上限。
然后进行行与行之间的xor,其中1^1=0; 0^0=0; 1^0=1; 0^1=1;
这种运算很像求矩阵的秩?相同的相减为0,不同的相减为1.
矩阵的秩定义:是其行向量或列向量的极大无关组中包含向量的个数。
矩阵的秩求法:用初等行变换化成梯矩阵, 梯矩阵中非零行数就是矩阵的秩.
于是需要的最少的颜色数量就是矩阵的秩啊。
所以这道题就被转化成了求矩阵的秩, 求法如下。
发现某易很喜欢考一些数学的技巧。。。
#include<iostream>#include<vector>#include <algorithm>using namespace std;int getHighPosition(int x){ int n = 0; while(x){ x>>=1; n++; } return n;}int solution(vector<int> colors){ if(colors.size()<3) return colors.size(); sort(colors.begin(),colors.end()); int res = 0; int bigger = colors.size()-1; int smaller = bigger-1; while(colors.size()>2){ //如果最大的两个数的最高位相等 if(getHighPosition(colors[smaller])==getHighPosition(colors[bigger])){ int temp = colors[smaller] ^ colors[bigger]; //如果异或出来的颜色不在里面 if (find(colors.begin(), colors.end(), temp) == colors.end()){ colors.push_back(temp); sort(colors.begin(),colors.end()); bigger = colors.size()-1; smaller = bigger-1; } } else{ res++; } bigger--; smaller--; colors.pop_back(); } return res+2;}int main(){ int n; vector<int> colors; int temp; cin>>n; while(n){ cin>>temp; colors.push_back(temp); n--; } cout<<solution(colors);}
0 0
- 混合颜料
- 混合颜料
- 混合颜料
- 混合颜料
- poj 2709 混合颜料
- 高斯消元(混合颜料)
- 网易笔试题:混合颜料
- 网易笔试题 混合颜料
- POJ 2709 混合颜料 acm 贪心
- 网易笔试编程题-混合颜料
- 混合颜料(求矩阵的秩问题)
- 2017网易内推笔试题---混合颜料
- 混合颜料-网易python(求矩阵的秩)
- 网易2017内推笔试2:混合颜料 [python]
- 混合颜料问题-网易的笔试题目(高斯消元找极大线性无关组)
- 网易2017内推笔试编程题合集(二)第一题 混合颜料
- 网易内推编程题:异或运算求混合颜料的最小种类
- 最少颜料
- Unix网络编程—— I/O复用之select
- 数据类型
- How do I utilise all the cores for nmake?
- 带你玩-Object Tracking using OpenCV (二)
- 2016再见,hello 2017
- 混合颜料
- sass 使用简介
- 设置tabBar的背景图片,选中文字颜色
- button 设置文字左对齐
- Android Studio 多渠道打包
- 构建Docker平台【第一篇】环境准备
- 经典内部排序算法学习总结(算法思想、可视化、Java代码实现、改进、复杂度分析、稳定性分析)
- 恶毒时光
- xcode8 修改的xib文件在xcode7,7.3.1上无法运行解决方案