关于acm新生欢乐赛的一点想法

A。现在有若干个 2 的整数次幂的数,想知道他们求和后的数转换为二进制后,有多少个 1?

分析:

本题有多种做法,开一个标记数组 表示给定的 n个数中为2的i次幂的数的个数,然后模拟二进制的加法进位,例如:假设有3个数为2的4次方,则他们相加后后一项变为3 ,因为二进制 后每一个数的要么为0 ,要么为1,所以3将 变为二进制后为11 ,然后相加后变成1100 ,以此类推,从 最后一位往前进位相加,全部处理完成后,统计数组中的1的个数即为最终答案,注意 数组的大 小,由于有进位操作,所以刚好开100000是过不去本题的。

反思:1.数组能开多大就开多大!

 2.灵活运用标记数组,否则很多题目会超限。

3.题意一定得读好,建议左右双开一个窗口,边写边看题意。

E
题意:给一个01字符串,选择连续的两个字符反转,问能否变成完全一样的
分析:首先统计出字符串中 和 的个数,若有一个数量为偶数,则一定能变成一样的,将那两个偶
数变换成奇数一样的即可,若0的个数和1的个数都是奇数的时候,则不论怎么操作,都会剩下1个是无 法变换的,所以,统计完0的个数和1的个数后,判断只有这两个个数均为奇数的时候,是不可能的,其 余情况均是可以的
分析:数学分析能力也是很重要的一项能力
F
题意:给长度为 的序列,可以选择任意长度的子序列(可以不连续),要求选择的序列中最大值
和最小值的差值不能超过 ,求最长的可能序列
做法 : 使用标记的思想,用 数组记录每一个数出现的次数,然后从0开始,去计算i到i + k中有多
少个数,每一次计算直接跑k的循环即可,取计算中的最大值即为最长可能的子序列
做法 : 用sort将数组排序后,使用双指针扫描即可,扫描的时候,若发现右侧指针的数与左侧指针
的数相差大于k,则左指针 ++ ,否则右指针 ++ ,然后边移动比计算长度即可,此方法复杂度最低,有兴 趣的同学可以学一下双指针的线性做法
分析:仍然是灵活使用标记数组
G
题意:找到1到n中有多少个完美数字,完美数字满足x = a^2+b^3+c^4,其中a, b, c均为素数。
分析:首先    !预处理!   (打表)。然后只需要遍历这些素数即可。然后暴力寻找a,b,c,即可
反思:素数(数列)问题一律考虑打表
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值