习题练习以

题意:求i&M的popcount的和,i属于0……N

主要思路还是变加为乘。

举个例子N=22,即10110

假设M的第3位是1,分析N中:

00110

00111

00100

00101

发现其实等价于

0010

0011

0000

0001

也就是左边第4位和第5位不变,右边第1位和第2位不变拼接起来,相当于0000~0011

01110

01111

01100

01101

等价于:

0110

0111

0100

0101

相当于0100~0111

10110

10111

10100

10101

相当于1000~1010

最后把3个部分合一起就是0000~1010

如果M的第3位是0,比如说10010(二进制),其实等价于求01110这个二进制数

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=998244353;
ll ans,n,m;
int main(){cin>>n>>m;for(int i=0;i<60;i++){if((m>>i)&1){ll mask=(1ll<<i)-1;if((n>>i)&1){ll tmp=(n>>(i+1)<<i)|(n&mask);//左边拼接上右边ans=(ans+tmp+1)%mod;}	else {ll t=(n-(1ll<<i))|mask;//先把n更新一下,注意要把右边变成最大值ll tmp=(t>>(i+1)<<i)|(t&mask);//同样处理ans=(ans+tmp+1)%mod;}}}cout<<ans;
}

题意:共n把钥匙m次测试,至少k把钥匙才打开门,问满足所有测试条件的真钥匙的组合种类

位元枚举:用位元表示所有真钥匙的组合,然后保存每个测试的钥匙状态,满足所有测试就是答案组合

#include <bits/stdc++.h>
using namespace std;
int keys[20];
char r[105];
int f(int x){int ct=0;while(x){if(x&1)ct++;x>>=1;}return ct;
}
int main(){int n,m,k;cin>>n>>m>>k;//n把钥匙,m个测试,至少k把钥匙才能打开门for(int i=0;i<m;i++){int c;cin>>c;while(c--){int a;cin>>a;keys[i]|=1<<(a-1);//把i测试用的钥匙存起来}cin>>r[i];//最终门的状态}int ans=0;for(int s=0;s<(1<<n);s++){//枚举所有正确钥匙的组合情况bool er=0;for(int i=0;i<m;i++){//看看是否满足所有的测试用例if((f(keys[i]&s)>=k&&r[i]!='o')||(f(keys[i]&s)<k&&r[i]=='o')){er=1;break;}}ans+=!er;}cout<<ans;
}

不难发现:10101010101010101010 = 10*(1010101010101010101)

就是10*(10^0+10^2+10^4+10^6+10^8+10^10+10^12+10^14+10^16+10^18) 进行等比求和:

10*(10^20-1)/(10^2-1)

那么输入一个N,我们计算出其长度len

就是:N*(10^0+10^len+10^len*2+10^len*3+……+10^len*n-1)

就是N*(10^len*n)/(10^len-1)

然后知识点:a/b%mod=a*b^(mod-2)%mod

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MOD=998244353;
ll f(ll x,ll y){x%=MOD;ll res=1;while(y){if(y&1)res=res*x%MOD;y>>=1;x=x*x%MOD;}return res;
}
ll inv(ll x){return f(x,MOD-2);
}
int main(){ll n;cin>>n;int len=(to_string(n)).size();cout<<n%MOD * (f(f(10,n),len)-1)%MOD * inv(f(10,len)-1)%MOD<<'\n';
}

题意:一共有n个店,每个店有许多口味,问能尝到所有口味至少要去多少家店

位元枚举:用位元来表示所有店的组合,并保存每个店提供的口味状态,如果某个组合中可提供所有的口味就行

#include <bits/stdc++.h>
using namespace std;
int d[10];
int main(){int n,m;cin>>n>>m;//n个店,m种口味for(int i=0;i<n;i++){string s;cin>>s;for(char c:s){d[i]=(d[i]<<1)+(c=='o');//保存第i个店卖的口味状态}}int an=100;for(int i=0;i<(1<<n);i++){//枚举所有的店的组合int now=0,cnt=0;for(int j=0;j<n;j++){if((i>>j)&1)now|=d[j],cnt++;//把组合中的每个店卖的东西都合并起来}if(now==(1<<m)-1)an=min(an,cnt);//如果当好覆盖了所有口味,那就更新一次答案}cout<<an;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/869462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《AIGC:智能创作时代》:AI创作革命来临,你准备好了吗?

想象一下&#xff0c;你正在欣赏一幅精美的画作&#xff0c;惊叹于其细腻的笔触和独特的构图。然而&#xff0c;当你得知这幅作品是由人工智能创作时&#xff0c;你会作何感想&#xff1f;这不再是科幻小说中的场景&#xff0c;而是我们正在经历的现实。 在这个AI技术飞速发展的…

QListWidget、QTreeWidget、QTableWidget的拖放

QListWidget、QTreeWidget、QTableWidget的拖放实验 QAbstractItemView::DragDropMode 的枚举值 QAbstractItemView::NoDragDrop0组件不支持拖放操作QAbstractItemView::DragOnly1组件只支持拖动操作QAbstractItemView::DropOnly 2组件只支持放置操作QAbstractItemView::DragDr…

AI 图像处理 --CodeFormer 简介

CodeFormer是一款基于深度学习技术&#xff0c;特别是利用自动编码器和VQGAN&#xff08;Vector Quantised Generative Adversarial Network&#xff09;进行人脸修复和视频增强的强大人工智能工具。它通过高分辨率重建和细节修复&#xff0c;显著提升了图像和视频的质量和视觉…

Django 视图 - FBV 与 CBV

Django 视图 - FBV 与 CBV 在 Django 框架中,视图是处理 Web 请求和返回 Web 响应的核心组件。Django 提供了两种主要的视图编写方式:函数基础视图(Function-Based Views,简称 FBV)和类基础视图(Class-Based Views,简称 CBV)。这两种方式各有特点,适用于不同的场景。…

WPF设置全局样式

目的 创建一个资源字典&#xff0c;自动引入到各个Window或者UserControl中&#xff0c;可以随意使用。或者引入多个控件包&#xff0c;为了做兼容&#xff0c;保证可以引用多个控件库。 1. 定义资源字典 首先&#xff0c;你需要创建一个XAML文件来定义你的资源字典&#xf…

Python中JSON处理技术的详解

引言 JSON&#xff08;JavaScript Object Notation&#xff09;作为当前最流行的数据传输格式&#xff0c;在Python中也有多种实现方式。由于JSON的跨平台性和简便易用性&#xff0c;它在数据交互中被广泛应用。本文将重点讨论如何熟练应用Python的JSON库&#xff0c;将JSON数…

生日判断星座【GO】

文章目录 星座列表生日转换为星座 星座列表 const (Aries "aries"Taurus "taurus"Gemini "gemini"Cancer "cancer"Leo "leo"Virgo "virgo"Libra "libra&q…

小红书后端

牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推&#xff0c;求职就业一站解决_牛客网 (nowcoder.com) 小红书推荐系统 题目&#xff1a; 思路&#xff1a; 尝试&#xff08;标题4&#xff09; import java.util.*;// 注意类名必须为 Main, 不要有任何 package xxx 信息…

FFmpeg 实现从麦克风获取流并通过RTMP推流

使用FFmpeg库实现从麦克风获取流并通过RTMP推流&#xff0c;FFmpeg版本为4.4.2-0。RTMP服务器使用的是SRS&#xff0c;我这边是跑在Ubuntu上的&#xff0c;最好是关闭掉系统防火墙。拉流端使用VLC。如果想要降低延时&#xff0c;请看我另外一篇博客&#xff0c;里面有说降低延时…

github 下载提速的几种方法

1. 代理下载&#xff08;无需注册&#xff09; //toolwa.com/github/ //d.serctl.com/2. 转入 Gitee 加速 将项目镜像到 Gitee 中下载加速 3. 使用 Watt Toolkit 加速 Watt Toolkit //steampp.net/选择合适的版本下载 选择 github&#xff0c;一键加速 4.CDN 加速 (修改…

html转markdown nodejs实现

用到了jsdom库&#xff0c;直接现成处理html标签结构&#xff0c;只需要关心format格式化样式即可。 比较简易&#xff0c;待后续优化&#xff0c;目前只是短时间批量转换html文件。 const { JSDOM } require(jsdom);const getText (htmlString) > {if (!htmlString) re…

浏览器开发者视角及CSS表达式选择元素

点击想要查看的接口&#xff0c;然后点击检查&#xff0c;便可以切换到该接口对应的html代码 如果F12不起作用的话&#xff0c;点击更多工具&#xff0c;然后选择开发者工具即可 ctrlF可以去查阅相关的CSS表达式选择元素 如果没有加#t1&#xff0c;那么表示的是选择所有的p 使用…

图解HTTP(5、与 HTTP 协作的 Web 服务器 6、HTTP 首部)

5、与 HTTP 协作的 Web 服务器 一台 Web 服务器可搭建多个独立域名的 Web 网站&#xff0c;也可作为通信路径上的中转服务器提升传输效率。 用单台虚拟主机实现多个域名 在相同的 IP 地址下&#xff0c;由于虚拟主机可以寄存多个不同主机名和域名的 Web 网站&#xff0c;因此…

Linux-多线程

线程的概念 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行&#xff0c;本质是在进程地址空间内运行在Linux系统中&#xff0c;在CPU眼中…

Labview_压缩文件

调用顺序 源文件 生成后的文件 1.新建ZIP文件 生成ZIP文件的路径&#xff1a;为最终生成ZIP文件的路径&#xff0c;需要提供ZIP文件的名称和类型 2.添加文件到压缩文件 源文件路径&#xff1a;为需要压缩的文件路径&#xff0c;非文件夹路径 生成ZIP文件时的路径&#x…

Elasticsearch 缓存策略详解:优化你的搜索体验

目录 1. Elasticsearch缓存机制概述 2. 缓存机制的详细解析 2.1 节点查询缓存 2.2 分片请求缓存 2.3 字段数据缓存 2.4 分片查询缓存 3. 合理缓存比例设置 3.1 节点查询缓存 3.2 分片请求缓存 3.3 字段数据缓存 3.4 分片查询缓存 4. 缓存监控与调优 5.实战调优 5…

区域特征检测工具的使用

区域特征检测工具的使用 选择区域-》右键-》工具->特征检测

实践致知第12享:如何新建一个Word并设置格式

一、背景需求 小姑电话说&#xff1a;要新建一个Word文档&#xff0c;并将每段的首行设置空2格。 二、解决方案 1、在电脑桌面上空白地方&#xff0c;点击鼠标右键&#xff0c;在下拉的功能框中选择“DOC文档”或“DOCX文档”都可以&#xff0c;如下图所示。 之后&#xff0…

Js- Math对象

1.对应的方法 Math.abs(x)&#xff1a;返回 x 的绝对值。Math.ceil(x)&#xff1a;返回大于或等于 x 的最小整数&#xff08;向上取整&#xff09;。Math.floor(x)&#xff1a;返回小于或等于 x 的最大整数&#xff08;向下取整&#xff09;。Math.round(x)&#xff1a;返回 x…

(图文详解)小程序AppID申请以及在Hbuilderx中运行

今天小编给大家带来了如何去申请APPID&#xff0c;如果你是小程序的开发者&#xff0c;就必须要这个id。 申请步骤 到小程序注册页面&#xff0c;注册一个小程序账号 微信公众平台 填完信息后提交注册 会在邮箱收到 链接激活账号 确认。邮箱打开链接后&#xff0c;会输入实…