网易--混合颜料

2024-04-13 01:48
文章标签 混合 网易 颜料

本文主要是介绍网易--混合颜料,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

你就是一个画家!你现在想绘制一幅画,但是你现在没有足够颜色的颜料。为了让问题简单,我们用正整数表示不同颜色的颜料。你知道这幅画需要的n种颜色的颜料,你现在可以去商店购买一些颜料,但是商店不能保证能供应所有颜色的颜料,所以你需要自己混合一些颜料。混合两种不一样的颜色A和颜色B颜料可以产生(A XOR B)这种颜色的颜料(新产生的颜料也可以用作继续混合产生新的颜色,XOR表示异或操作)。本着勤俭节约的精神,你想购买更少的颜料就满足要求,所以兼职程序员的你需要编程来计算出最少需要购买几种颜色的颜料?
输入描述:
第一行为绘制这幅画需要的颜色种数n (1 ≤ n ≤ 50)
第二行为n个数xi(1 ≤ xi ≤ 1,000,000,000),表示需要的各种颜料.
输出描述:
输出最少需要在商店购买的颜料颜色种数,注意可能购买的颜色不一定会使用在画中,只是为了产生新的颜色。
示例1
输入
3
1 7 3
输出
3

解题思路

首先分析题目给出的示例1
输入为1 7 3
你可以购买1,2,4这三种颜料,1已经有了,3可以通过由 1 XOR 2 = 3得到,7可以通过1 XOR 4 = 5,5 XOR 2 = 7 得到,所以最少为3种。
理解1
想象一下对于两个给定的数(向量),他们可以生成的新的数,本质就是两个向量的所有线性表示。因为此处实际是在做一个mod 2的操作,那么线性表示的系数就是0或1。 于是原问题就抽象为,给定一些向量(数)组成的向量空间,增加一个最小的向量集合,使向量的线性组合都可以生成向量空间中的所有向量。这个叫做向量空间的基。

怎么算出这个基呢?线性代数里面我们都学过:可以对原来所有向量组成的矩阵用高斯消元法直到让剩余的向量都是线性无关的,非0向量的个数就是答案。每次将最高位的1进行^运算,使得数组里面从后往前数最高位每个1只保留一个,最终得到类似于{0,0,00000001,00000011,00011000,00100010}这样的结构,那么答案就出来了。

理解2
给定多个数字,将这些数之间进行多次xor(异或操作),其中一个数可能被xor多次,看最后能剩余多少不重复的数(任何两个数字异或都没有出现在现在的数组中),这些不重复的数字就是一组基,输出数量即可。这种方法可以用暴力求解。

一些规律(下面会用到)
1. 0001,0010,0100,1000(这四个数”线性无关”,注意运算规则是异或(和线性代数有区别),任意两个数组进行XOR运算结果都不在这个数组中,也即是一个基,可以表示任何4位数),可以通过^生成任意4位的数字
2. a^b=c那么a^c=b

AC代码

这道题见过的最简洁的解法

#include <iostream>
#include <algorithm>
using namespace std;int main()
{int i,j,n,x[55];cin>>n;for(i=0;i<n;++i)cin>>x[i];for(i=n-1;i>0;--i){sort(x,x+i+1);//从小到大排序for(j=i-1;j>=0;--j) //从大到小依次遍历小于 x[i] 的数字if((x[i]^x[j])<x[j]) //两个数字高位相同的情况。(如果高位不相同,且x[i] > x[j],则XOR后 x[i] ^ x[j] > x[j])x[j]^=x[i]; //将 x[j]的高位去掉,根据异或的性质 a^b=c那么a^c=b,现在的 x[j] 可以算出来以前的原始 x[j],等于是换了个形式表示,所以整个算法等于是求可以表示数组的最小的基础(不同的是运算规则是XOR)}for(i=0;x[i]==0;++i); //数组是从小到大排列的,记录第一个不为0的索引cout<<n-i; //计算数字里面非零个数return 0;
}

这篇关于网易--混合颜料的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/898820

相关文章

大厂算法例题解之网易2018秋招笔试真题 (未完)

1、字符串碎片 【题目描述】一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,“aaabbaaac” 是由下面碎片组成的:‘aaa’,‘bb’,‘c’。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的 平均长度是多少。 输入描述: 输入包括一个字符串 s,字符串 s 的长度 length(1 ≤ length ≤ 50),s 只含小写字母(‘a’-‘z’) 输出描述

混合模式属性background-blend-mode

background-blend-mode 是 CSS 中的一个属性,它允许你将背景图像与背景颜色或背景图像之间以一种特定的混合模式进行混合。这个属性为网页设计师提供了一种强大的方式来创建视觉上吸引人的背景效果,无需使用图像编辑软件或额外的图像文件。 background-blend-mode 可以应用于单个背景图像与背景颜色之间,或者当设置多个背景图像时,应用于这些图像之间。混合模式包括了许多

旅行商问题 | Matlab基于混合粒子群算法GA-PSO的旅行商问题TSP

目录 效果一览基本介绍建模步骤程序设计参考资料 效果一览 基本介绍 混合粒子群算法GA-PSO是一种结合了遗传算法(Genetic Algorithm, GA)和粒子群优化算法(Particle Swarm Optimization, PSO)的优化算法。在解决旅行商问题(Traveling Salesman Problem, TSP)时,这种混合算法可以结合两种算法的优点

【风力发电】基于智能控制器的光伏/风电混合发电系统

摘要 光伏和风力发电因其可再生性和环保性在全球范围内得到了广泛应用。本文提出了一种基于智能控制器的光伏/风电混合发电系统,通过智能控制器对系统的功率输出进行优化管理。实验结果表明,该系统能够在不同的环境条件下高效运行,显著提高了能源利用率和系统稳定性。 理论 光伏/风电混合发电系统结合了太阳能和风能的优势,能够更好地适应不同的气候条件。然而,由于太阳辐射和风速的变化性,这种系统的功率输出

【UVa】 10735 Euler Circuit 混合图的欧拉回路 最大流

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1676 题目要求:求混合图的欧拉回路+输出路径。 题目分析: 先看一段比较流行的说法吧~: -----------------------------------------

深入了解CSS混合模式

CSS混合模式(也称为CSS Blend Modes)是一种强大的功能,它允许开发者在CSS中控制元素如何与它们的背景或其他元素混合。这些模式类似于图像编辑软件(如Photoshop)中的混合模式,使得开发者能够创建出复杂而富有表现力的视觉效果,而无需依赖额外的图像或复杂的JavaScript代码。 CSS混合模式的基础 CSS混合模式是通过mix-blend-mode和background-

高斯混合模型(GMM)的EM算法实现

在 聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut一文中我们给出了GMM算法的基本模型与似然函数,在EM算法原理中对EM算法的实现与收敛性证明进行了详细说明。本文主要针对如何用EM算法在混合高斯模型下进行聚类进行代码上的分析说明。 GMM模型: 每个 GMM 由 K 个 Gaussian 分布组成,每个 Gaussian 称为一个“C

Unity(2022.3.41LTS) - 动画混合树

目录 零.简介 一、动画混合树的概念 二、动画混合树的类型 三、动画混合树的创建和编辑 1.创动画混合树建 2.编辑动画混合树 3.1D混合树 4.2D混合树 四、动画混合树的使用方法 1.关联动画混合树 2.控制混合参数 3.1D混合树使用 4.查看1D效果 5.2D混合树使用 6.2D混合树效果 五、动画混合树的优化和注意事项 零.简介 在 Unit

猫猫学iOS(四十七)之网易彩票帮助界面UIWebView的运用

猫猫分享,必须精品 原创文章,欢迎转载。转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 效果: 制作过程 首先是帮助按钮那个地方的点击。 这里是用点击跳转的用的是 NJSettingArrowItem,前面的设置的,从字典通过模型转过来的。 // 分享NJSettingArrowItem

(素材源码)猫猫学iOS(四十六)之网易彩票幸运大转盘

猫猫分享,必须精品 原创文章,欢迎转载。转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents 素材源码地址:http://download.csdn.net/detail/u013357243/8713827 效果 代码: NYWheel NYWheel.h //// NYWheel.h//