传统题 文件IO:think 1000ms 256MiB

思考(13-4)

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目背景

大维在课堂上提出了一个有趣的编程问题:给定一个非负整数序列,希望你分析下面这段朴素枚举两两组合的代码,计算最终累加值并输出。

题目描述

现在,你手里有一个长度为 n 的非负整数序列

a1,a2,,an.a_1, a_2, \dots, a_n\,.

下面给出一段代码:


ans = 0;
for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++)
        ans += max(a[i], a[j]) * (a[i] & a[j]);

其中,max(a[i], a[j]) 表示 aia_iaja_j 中的较大值,& 表示二进制下的按位与运算。

你的任务是计算给定序列下,变量 ans 的最终值,并输出 ans109+710^9+7 取模后的结果。由于直接套用上述双重循环在最坏情况下无法通过时间限制,请注意挖掘数据的位运算性质以设计更高效的算法。

输入格式

第一行一个正整数 n,表示序列长度。
第二行 n 个非负整数,第 i 个数即为 aia_i

输出格式

输出一个整数,表示 ans mod (10^9+7) 的值。

样例

5
1 2 3 4 5
39

样例解释

对于序列 [1,2,3,4,5],枚举所有 1i<j51 \le i < j \le 5,计算

$$\sum_{1\le i<j\le5}\max(a_i,a_j)\times(a_i\&a_j)=39\,. $$

数据范围

  • 对于 20% 的数据,1n30001 \le n \le 3000, 0ai<2300 \le a_i < 2^{30}.
  • 对于 50% 的数据,1n1051 \le n \le 10^5, 0ai<2120 \le a_i < 2^{12}.
  • 对于 100% 的数据,1n1051 \le n \le 10^5, 0ai<2300 \le a_i < 2^{30}.

附件

CSP-X/J 模拟赛9补题

未参加
状态
已结束
规则
IOI
题目
8
开始于
2025-10-26 14:00
结束于
2025-10-27 14:00
持续时间
24 小时
主持人
参赛人数
31