首页 > 编程语言 >塔子哥的编程乐趣-腾讯2023笔试(codefun2000)

塔子哥的编程乐趣-腾讯2023笔试(codefun2000)

时间:2024-07-31 12:59:34浏览次数:19  
标签:塔子哥 奇数 int cnt0 个数 偶数 数组 2023 codefun2000

题目链接
塔子哥的编程乐趣-腾讯2023笔试(codefun2000)

题目内容

塔子哥是一位资深的程序员,他最近在研究一种特殊的数组操作。他有一个由正整数组成的数组,数组的长度是偶数。塔子哥可以对数组中的任意一个数字执行以下两种操作之一:将该数字乘以 2;将该数字除以 2 并向下取整。
塔子哥的目标是通过一系列操作,使得最终数组中恰好一半的数字是奇数,另一半是偶数。他希望找到一种方案,使得操作次数最少。

输入描述

输入的第一行包含一个正偶整数 n,表示数组的长度。
第二行包含 n 个正整数 A1 ,A2 ,…,An,表示初始的数组。

输出描述

输出一个整数,表示达成目标所需的最少操作次数。

样例1

输入

6
1 1 4 5 1 4

输出

1

样例2

输入

8
1 2 4 5 6 10 8 8

输出

2

提示

初始数组为 [1,1,4,5,1,4]。将第四个数字 5 除以 2 并向下取整,得到 [1,1,4,2,1,4],此时数组中恰好一半是奇数,另一半是偶数。
评测数据与规模对于所有评测用例,满足 2 ≤ n ≤ 1 0 5 , 1 ≤ A i ≤ 1 0 9 2≤n≤10^5 ,1≤Ai ≤10^9 2≤n≤105,1≤Ai≤109 ,并且 n 是偶数。

题解1

#include<bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10;
int n, cnt0, cnt1, st[N]; // st[i]表示将第i个偶数转成奇数的最少操作次数 
int main(){
	scanf("%d", &n);
	for(int i = 1, x; i <= n; i++){
		scanf("%d", &x);
		if(x&1) cnt1++; // 奇数个数+1
		else{
			 cnt0++; // 偶数个数+1 
			 for(int j = 31; j>=1; j--){
			 	// (x)&(-x)得到的是一个数的二进制表示的末尾1的对应值
				 // 比如:x=6,则的x的二进制表示为110,则(x)&(-x)=(110)&(010)= 010
				 // -6的二进制表示是对110先按位取反得到001,再加1得到010,即110 -> 001 -> 010 
			 	if(1<<j == (x&(-x))){
			 		st[cnt0] = j;
			 		break;
			 	}
			 }
		}
	}
	
	long long ans = 0;
	if(cnt0 == cnt1){ // 奇数个数和偶数个数一样多 
		ans = 0;		
	} else if(cnt0 < cnt1){ // 奇数个数多于偶数个数,只需要进行这样的操作:一个奇数乘以2,就可以得到偶数;重复这样的操作,直到奇数个数和偶数个数一样多 
		ans = (cnt1 - cnt0)/2;
	}else { // 奇数个数少于偶数个数,需要将若干偶数转成奇数;需要得到每个偶数转成奇数的最少操作数,然后按最少操作数进行升序排序,选择最小的若干个,直到奇数个数和偶数个数一样多 
		sort(st+1, st+1+cnt0);
		int num = (cnt0 - cnt1)/2; // num表示需要将偶数转变成奇数的个数 
		for(int i = 1; i <= num; i++){
			ans += st[i];
		}
	}
	printf("%lld\n", ans);
	return 0;
}

标签:塔子哥,奇数,int,cnt0,个数,偶数,数组,2023,codefun2000
From: https://blog.csdn.net/qq_45332149/article/details/140819722

相关文章

  • 更新至2023年上市公司ESG数据合集(十份数据:华证年度、华证季度、商道融绿、wind、秩鼎
    更新至2023年上市公司ESG数据合集(十份数据:华证年度、华证季度、商道融绿、wind、秩鼎、润灵环球、盟浪、富时罗素、上市银行华证ESG)数据名称:一、2018-2023年上市公司富时罗素ESG评分数据二、2018-2023年上市公司WindESG评级数据三、2014-2023年上市公司盟浪ESG评级数据四......
  • 2023华数杯优秀论文A-数值模拟在隔热结构上的应用
    摘要本文研究了平纹织物整体的热导率和单根A纤维的热导率之间模型,对题目所给的表面温度分布进行插值,对于纤维材料建立了整体分析和微观最小单位分析两种模型,通过建立热传导方程和边界条件并且利用两种模型的参数进行温度分布的计算,使得两种模型下的温度分布最接近则建立......
  • Solution - Atcoder UTPC2023P Priority Queue 3
    考虑找一些关于合法的\(X\)加入的数的判定条件。假设遇到了一个\(\operatorname{pop}\)操作,令这里删除的数为\(a_i\),显然\(X\)中的数应该要有\(a_i\),其次\(X\)中其他的加入的数要么\(>a_i\)要么是\(a\)中的元素(在前面的\(\operatorname{pop}\)就已经被删了)。于......
  • joisc 2023 护照
    joisc2023护照这题题意好难理解。题目链接P9331[JOISC2023Day1]Passport题意描述有\(n\)个点,每个点连边连向编号在\([L_i,R_i]\)间的点,有\(Q\)组询问,每次从\(x\)号点出发,求出到\(1\)号点和到\(n\)号点的两条路径经过点的并集的最小值。\(n,Q\leq2\cdot......
  • CSP2023&NOIP2023游记
    CSP(10.21)早上8:30开考,根据以往的经验,去考场去早了也只能白等着,所以这次差不多8:10才进考场(指的是进学校大门),到的时候发现我们机房的几个同学都先走了。先是普及组,希望拿个400,还是比较有信心的。J组8:30开始考试。先看了一下四道题,前三道都是直接看出了思路,T4感觉有点难度,到时候可......
  • 2023暑假总结2
    暑假总结27.1~7.157月份前半月我们主要是和NOI选手一起打比赛和自己刷题,感谢这次NOI让我真正地体会到了高手的厉害,但也让我觉得NOI其实也不是想象中的那么困难,让我看到了希望。由于之前写过总结,这里就一笔带过了。7.17模拟测试这次模拟测试是和七林一起考的,第一题是一个结......
  • 2023暑假总结1
    暑假总结(7.1-7.7)bymax讲课我们听了yny学长组合数学的讲解,下面是一些有用的公式:吸收公式:\(k\binom{n}{k}=n\binom{n-1}{k-1},(n-k)\binom{n}{k}=n\binom{n-1}{k},k\in\mathbb{Z}\)。上指标反转:\(\binom{n}{k}=(-1)^kn\binom{k-n-1}{k},k\in\mathbb{Z}\)。上指标求和:\(......
  • CS50x2023 Psets9“财务”。获取股票报价时的“查找”功能问题
    我在此任务中的问题是从查找函数获取任何其他“无”输出。经过几天的战斗,我实现了yt教程中的代码,精确地为1到1,但它仍然给出相同的结果-查找“无”。我不知道我可以在哪里寻找这种行为的根源。下面我附上了我的“quote.html”和@quote应用程序Python代码,用于在本练习中获取......
  • 打卡信奥刷题(455)用Scratch图形化工具信奥P9299[普及组/提高组] [CCC 2023 J1] Deliv-e
    [CCC2023J1]Deliv-e-droid题面翻译机器人Deliv-e-droid在送快递,如果它成功地将一个快递送达,则它获得505050元钱,如果未能成功送达,它被扣除......
  • 「CCPC 2023 北京市赛」史莱姆工厂
    由于每次合并可以刻画为向外延伸,那么考虑区间\(\text{dp}\),设\(dp_{l,r,m,c}\)表示考虑了\([l,r]\)且剩下了一个质量为\(m\in[0,K)\)颜色为\(c\)的史莱姆的答案。状态过大且转移方程不便于优化而考虑优化状态,由于对于一个极短的需要合并成一个史莱姆的区间\([p,q]\),......