当前位置: 首页 > article >正文

MC0309魔法项链

思路:

以数位贡献的思路来写这题,

  • 统计每一位上为 1 的个数

    • 对于第 k 位,统计有多少个数在这一位上为 1,记作 cnts[k]

  • 枚举每个数,逐位分析它对整体的贡献(即与其它数交互时的和)

    • 如果第 k 位为 1:

      • & 中只有其他第 k 位为 1 的数才会产生贡献:共 cnts[k] - 1

      • | 中其他所有 n - 1 个数都可以贡献

      • 总和为:

        (1≪k)×((n−1)+(cnts[k]−1))
    • 如果第 k 位为 0:

      • & 无贡献

      • | 仅与第 k 位为 1 的数有贡献(共 cnts[k] 个)

      • 总和为:

        (1≪k)×cnts[k]
  • 总贡献除以 2,避免重复计算每对 (i,j)

  • 最后加上所有数本身的魔力值。

(数位贡献)

时间复杂度:O(n)

代码:

#include<bits/stdc++.h>
using namespace std;
using ll = long long;int main() {int n;cin >> n;vector<ll> a(n);vector<ll> cnts(30, 0);for (int i = 0; i < n; ++i) {cin >> a[i];for (int k = 0; k < 30; ++k) {if ((a[i] >> k) & 1) cnts[k]++;}}ll ans = 0;for (int i = 0; i < n; ++i) {for (int k = 0; k < 30; ++k) {if ((a[i] >> k) & 1) {ans += (1LL << k) * ((n - 1) + (cnts[k] - 1));} else {ans += (1LL << k) * cnts[k];}}}ans /= 2;  // 每对重复计算了两次for (ll val : a) ans += val;cout << ans << endl;return 0;
}

http://www.lryc.cn/news/2391958.html

相关文章:

  • 为 Ubuntu 安装的软件创建桌面图标
  • uni-app 中开发问题汇总
  • https下git拉取gitlab仓库源码
  • 距离计算范围查找距离排序
  • PS linux 基础篇1-AXI_DMA
  • AI大模型学习三十、ubuntu安装comfyui,安装插件,修改返回405 bug,值得一看喔
  • 11高可用与容错
  • 百度之星2024 初赛第一场 补给
  • Collection集合遍历的三种方法
  • Taro on Harmony C-API 版本正式开源
  • 知识隔离的视觉-语言-动作模型:训练更快、运行更快、泛化更好
  • [ARM][架构] 02.AArch32 程序状态
  • Dockerfile正确写法之现代容器化构建的最佳实践
  • React---day4
  • ArkUI(方舟UI框架)介绍
  • 【Bug】定时任务中 Jpa Save 方法失效
  • 英语科研词汇现象及语言演变探讨
  • C# 打印PDF的常用方法
  • 若依微服务的定制化服务
  • Axios 如何通过配置实现通过接口请求下载文件
  • 小表驱动大表更快吗,不是
  • 20250529-C#知识:运算符重载
  • 【HW系列】—目录扫描、口令爆破、远程RCE流量特征
  • 如何在WordPress网站中添加相册/画廊
  • 【NLP基础知识系列课程-Tokenizer的前世今生第一课】Tokenizer 是什么?为什么重要?
  • Codeforces Round 1025 (Div. 2)
  • Ubuntu20.04操作系统ssh开启oot账户登录
  • 类欧几里得算法(floor_sum)
  • 每日Prompt:卵石拼画
  • 湖北理元理律师事务所观察:债务优化如何成为民生安全网