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

位运算+前缀和+预处理,CF 1017D - The Wu

目录

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

二、解题报告

1、思路分析

2、复杂度

3、代码详解


一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

1017D - The Wu


二、解题报告

1、思路分析

我们注意到 sum(w[])会很大但是 k 很小,这说明我们可以从k的值域入手

又观察到 n 很小,有点状压预处理的意思

因为n <= 12,我们可以预处理:

cnt[x], x < 1 << n,cnt[x] 为 x 出现次数

sum[x],x < 1 << n,当 s 和 t 相同位 = x时的花费

acc[k][t],和 t 相同位 花费不超过k的s的数目

这个如何预处理呢?

我们直接暴力枚举所有s和t的可能,两两之间通过 ((1 << n) - 1) ^ (s ^ t) 即可得到相同位的集合,进而得到花费,然后对花费求前缀和即可

2、复杂度

时间复杂度: O(2^{2n} + 2^n U + qn)空间复杂度:O(n + m)

3、代码详解

 ​
#include <bits/stdc++.h>
// #include <ranges>using u32 = unsigned;
using i64 = long long;
using u64 = unsigned long long;constexpr int P = 1'000'000'007;void solve() {int n, m, q;std::cin >> n >> m >> q;std::vector<int> w(n), cnt(1 << n);for (int i = 0; i < n; ++ i) std::cin >> w[i];std::vector<int> sum(1 << n);for (int i = 1, ed = 1 << n; i < ed; ++ i) {int lb = (i & -i);sum[i] = sum[i ^ lb] + w[n - 32 + __builtin_clz(lb)];}std::string s;for (int i = 0; i < m; ++ i) {std::cin >> s;int num = 0;for (int j = 0; j < n; ++ j)if (s[n - 1 - j] ^ 48)num |= 1 << j;++ cnt[num];}std::vector<std::vector<int>> acc(101, std::vector<int>(1 << n));int msk = (1 << n) - 1;for (int i = 0, ed = 1 << n; i < ed; ++ i) {for (int j = 0, ed = 1 << n; j < ed; ++ j) {if (sum[msk ^ (i ^ j)] <= 100)acc[sum[msk ^ (i ^ j)]][i] += cnt[j];}for (int j = 0; j < 100; ++ j)acc[j + 1][i] += acc[j][i];}std::string t;for (int i = 0, k; i < q; ++ i) {std::cin >> t >> k;int num = 0;for (int j = 0; j < n; ++ j)if (t[n - 1 - j] ^ 48)num |= 1 << j;std::cout << acc[k][num] << '\n';}
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int t = 1;// std::cin >> t;while (t--) {solve();}return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CCF推荐A类会议和期刊总结(计算机网络领域)- 2022
  • 5、Kafka
  • HTML高级技术解析与实践指南
  • Windows环境下 VS2022 编译 LAME 源码
  • 【Redis】为什么选择 Redis 做缓存?
  • 【ShuQiHere】初识 Node.js:服务器端 JavaScript 的强大之处
  • Spring1~~~
  • ONU测试需要那些协议的学习
  • 第三章 Mybatis 常用工具
  • 【学习笔记】手写 Tomcat -- 预备知识
  • freemarker模板学习笔记
  • 【C#编程技术总结】魔法包唤醒同一局域网设备
  • Unity解析XML开发随机名字生成模块
  • 联想泄露显示本月推出更便宜的Copilot Plus电脑
  • 虚幻引擎VR游戏开发02 | 性能优化设置
  • 10个最佳ES6特性 ES7与ES8的特性
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Java,console输出实时的转向GUI textbox
  • JS 面试题总结
  • Laravel核心解读--Facades
  • Mithril.js 入门介绍
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Spring-boot 启动时碰到的错误
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • vue自定义指令实现v-tap插件
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 将回调地狱按在地上摩擦的Promise
  • 码农张的Bug人生 - 见面之礼
  • 扑朔迷离的属性和特性【彻底弄清】
  • 悄悄地说一个bug
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 首页查询功能的一次实现过程
  • 思考 CSS 架构
  • 用Canvas画一棵二叉树
  • 【云吞铺子】性能抖动剖析(二)
  • ​2021半年盘点,不想你错过的重磅新书
  • ​如何使用QGIS制作三维建筑
  • #数据结构 笔记一
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (zhuan) 一些RL的文献(及笔记)
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (七)c52学习之旅-中断
  • .FileZilla的使用和主动模式被动模式介绍
  • .Net Core中Quartz的使用方法
  • .net 生成二级域名
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET连接MongoDB数据库实例教程
  • .Net面试题4
  • .net专家(高海东的专栏)