首页 > 试题广场 >

小O的数位翻转

[编程题]小O的数位翻转
  • 热度指数:227 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小O有一个长度为 n 的数组 a,他现在想要选择其中一个数字进行“二进制翻转”操作,他想知道有多少种可能的选择方式,使得操作后的数组总和比不操作更大

二进制翻转:指将 x 的二进制翻转,翻转后去除前导 0。
(例如:12=(1100)_2,f(12) = (0011)_2 = 3。)

输入描述:
第一行输入一个正整数 n\ (1 \leq n \leq 2*10^5),表示数组 a 的长度。
第二行输入 n 个正整数 a_1,a_2,\dots,a_n\ (1 \leq a_i \leq 10^9),表示数组 a 的元素。


输出描述:
在一行上输出一个整数,表示合法的方案数。
示例1

输入

5
11 12 11 13 12

输出

2

说明

(11)_{10}=(1011)_2 ,翻转后变为 (1101)_2 ,大于翻转前;
(12)_{10}=(1100)_2(13)_{10}=(1101)_2 翻转后均小于翻转前。
示例2

输入

6
1 2 3 4 5 6

输出

0
头像 有胆量的柯基在学习
发表于 2025-08-22 21:29:52
#include <bits/stdc++.h> using namespace std; // 翻转定义的函数 f(x) static inline long long flipBin(long long x) { // 去掉末尾的 0(反转后这些会变成前导 0 被删掉) 展开全文
头像 牛客420954425号
发表于 2025-08-13 17:03:11
import sys if __name__ == "__main__": line_0 = sys.stdin.readline().strip() arr = sys.stdin.readline().strip().split()[: int(line_0 展开全文
头像 丨阿伟丨
发表于 2025-09-11 17:27:59
题目链接 小O的数位翻转 题目描述 给定一个长度为 的数组 ,我们可以对其中任意一个数字 进行一次“二进制翻转”操作。 二进制翻转的定义是:将数字的二进制表示进行翻转,之后去除前导零。例如,十进制数 的二进制是 ,翻转后得到 ,即十进制的 。 我们需要计算,有多少种选择数字的方式,使得操作后的 展开全文