牛客周赛 Round 32 E.小红的回文数【挖掘性质+哈希前缀和】

原题链接:https://ac.nowcoder.com/acm/contest/75174/E

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

小红定义一个整数是“好数”,当且仅当该整数通过重排之后可以形成回文数。(可以包含前导零)
现在小红拿到了一个正整数x,小红想截取一段连续区间得到好数,她想知道有多少种不同的方案?

输入描述:

输入一个正整数x。
1≤x≤10^(10^5)

输出描述:

得到“好数”的方案数。

示例1

输入

110

输出

5

说明

长度为 1 的区间,三个都是合法的。
长度为 2 的区间,"11"是合法的,"10"是不合法的。
长度为 3 的区间, "110"是合法的。

解题思路:

当截取的区间长度为偶数时,每种字符都只能出现偶数次,

当截取的区间长度为奇数时,有且仅有一种字符出现奇数次。

综上所述最多只能有一种字符出现奇数次。

(1)所有字符出现偶数次

(2)0,1,2,3,4,5,6,7,8,9中的某一种字符出现奇数次。

由于要求的是满足要求的子区间个数,我们可以使用前缀和进行维护,到这里我们还需要知道一个性质。

性质如下:

  • 奇数-奇数=偶数
  • 偶数-偶数=偶数
  • 奇数-偶数=奇数
  • 偶数-奇数=奇数

我们不妨用一个二进制数temp表示当前某种数出现次数的奇偶性,例如temp二进制数的第i位1表示数字i出现奇数次,否则表示数字i出现偶数次,比如说temp的第0位为1表示0出现的次数为奇数,否则表示0出现的次数为偶数。

当前位置前缀和temp,如果要使得子区间所有数字都出现偶数次,那么前面位置前缀和表示应该和temp一样,俩个前缀和相减才能保证每种数字出现偶数次。

当前位置前缀和temp,如果要使得某一种数字出现奇数次,其他数字都出现偶数次,例如数字i出现奇数次,那么前面位置前缀和应该为temp^(1<<i),其他位置奇偶性相同,相减就是偶数次,第i个位置奇偶性不同,那么相减为奇数,俩个前缀和相减才能保证只有某一种数字出现奇数次,其他数字都出现偶数次。

时间复杂度:O(n*10),枚举字符串s时间为O(n),枚举某一种出现次数为奇数的字符,总共有10种,所以时间为O(10),所以最终时间为O(10*n),时间复杂度为O(n),常数为10。

空间复杂度:O(n),使用一个哈希表,存储所有前缀和的哈希值。

cpp代码如下:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <unordered_map>using namespace std;
typedef long long LL;
typedef pair<int, int> PII;const int N = 1e5 + 10;
int n, m;
unordered_map<int,int>mp;
int main()
{string s;cin>>s;n=s.size();int temp=0;mp[temp]++;  //所有数字出现0次,加入哈希表LL sum=0;  //sum记录答案for(int i=0;i<n;i++){temp^=(1<<(s[i]-'0')); //异或上当前位置,表示当前位置结尾的前缀和sum+=mp[temp];  //所有数字俩个前缀和奇偶性相同,也就是所有字符出现偶数次的区间for(int j=0;j<10;j++){sum+=mp[temp^(1<<j)]; //某个数字出现奇数次,其他数字出现偶数次的区间。}mp[temp]++;  //当前位置结尾的前缀和加入哈希表}cout<<sum;return 0;
}

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

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

相关文章

java学习07---综合练习

飞机票 1.需求: 机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。 按照如下规则计算机票价格&#xff1a;旺季&#xff08;5-10月&#xff09;头等舱9折&#xff0c;经济舱8.5折&#xff0c;淡季&#xff08;11月到来年4月&#xff09;头等舱7…

Linux命令-blockdev命令(从命令行调用区块设备控制程序)

说明 blockdev命令 在命令调用“ioxtls”函数&#xff0c;以实现对设备的控制。 语法 blockdev(选项)(参数)选项 -V&#xff1a;打印版本号并退出&#xff1b; -q&#xff1a;安静模式&#xff1b; -v&#xff1a;详细信息模式&#xff1b; --setro&#xff1a;只读&#x…

浅谈jmeter性能测试步骤入门

一、Jmeter简介 1 概述 jmeter是一个软件&#xff0c;使负载测试或业绩为导向的业务&#xff08;功能&#xff09;测试不同的协议或技术。 它是 Apache 软件基金会的Stefano Mazzocchi JMeter 最初开发的。 它主要对 Apache JServ&#xff08;现在称为如 Apache Tomca…

以谷歌浏览器为例 讲述 JavaScript 断点调试操作用法

今天来说个比较实用的东西 用浏览器开发者工具 对 javaScript代码进行调试 我们先创建一个index.html 编写代码如下 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content&…

Verilog和Verilog-A有什么区别

Verilog和Verilog-A都是硬件描述语言&#xff0c;用于设计和仿真电子系统。 Verilog 是一种硬件描述语言&#xff0c;广泛用于数字电路的设计、验证和仿真。它是一种结构化的语言&#xff0c;用于描述数字电路的行为和结构。Verilog可用于编写数字逻辑、寄存器传输级&#xff…

Nature Machine Intelligence 法国国家科学研究中心评论“使用大语言模型进行研究的危机”

ChatGPT 于 2022 年底发布&#xff0c;将大型语言模型 &#xff08;LLM&#xff09; 推到了聚光灯下。通过使用户能够直接用自然语言查询模型&#xff0c;ChatGPT 实现了对这些模型的访问——这是一个受欢迎的发展。从那时起&#xff0c;ChatGPT 和 Bard、Claude 和 Bing AI 等…

linux安装单机版redis详细步骤,及python连接redis案例

文章目录 linux相关工具yum方式安装redis使用编译安装redis配置redis为systemctl启动其它: 安装redis6.0python连接redis案例 linux相关工具 ./redis-benchmark #用于进行redis性能测试的工具 ./redis-check-dump #用于修复出问题的dump.rdb文件 ./redis-cli …

MongoDB聚合:$geoNear

$geoNear根据指定的点按照距离以由近到远的顺序输出文档。 从4.2版本开始&#xff0c;MongoDB移除了limit和num选项以及100个文档的限制&#xff0c;如果要限制结果文档的数量可以使用$limit阶段。 语法 { $geoNear: { <geoNear options> } }$geoNear操作接受一个包含…

【报错解决】-bash: export: `-8‘: not a valid identifier 不是有效的标识符

现象 一登陆就提示-bash: export: -8’: not a valid identifier 不是有效的标识符 问题出现的原因 设置字符集时多写了空格 [rootdb1 ~]# cat >>/etc/profile<<EOF export LANGen_US.UTF -8(-8前不应有空格) EOF 解决方法 cd /etc vi profile 把export带有-8的…

188. 买卖股票的最佳时机 IV

188. 买卖股票的最佳时机 IV 题目链接&#xff1a;188. 买卖股票的最佳时机 IV 代码如下&#xff1a; //动态规划 //参考&#xff1a;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/ class Solution { public:int maxProfit(int k, vector<int>&am…

如何升级至ChatGPT Plus:快速指南,ChatGPT的秘密武器GPT4.0是什么?

提到 ChatGPT。想必大家都有所耳闻。自从 2022 年上线以来&#xff0c;就受到国内外狂热的追捧和青睐&#xff0c;上线2个月&#xff0c;月活突破1个亿&#xff01;&#xff01;&#xff01; 而且还在持续上涨中。因为有很多人都在使用 ChatGPT 。无论是各大头条、抖音等 App、…

利用YOLOv8 pose estimation 进行 人的 头部等马赛克

文章大纲 马赛克几种OpenCV 实现马赛克的方法高斯模糊pose estimation 定位并模糊:三角形的外接圆与膨胀系数实现实现代码实现效果参考文献与学习路径之前写过一个文章记录,怎么对人进行目标检测后打码,但是人脸识别有个问题是,很多人的背影,或者侧面无法识别出来人脸,那…

工具 canvas 画时钟表

自己写的工具&#xff0c;代码和Auto.js有差异 importClass(android.view.MotionEvent) importClass(android.graphics.Paint) importClass(java.util.TimeZone); importClass(java.text.SimpleDateFormat); ui.layout( <vertical><text id"坐标1"/>&l…

powershell 雅地关闭UDP监听器

在PowerShell中优雅地关闭UDP监听器意味着你需要一种机制来安全地停止正在运行的UdpClient实例。由于UdpClient类本身没有提供直接的停止或关闭方法&#xff0c;你需要通过其他方式来实现这一点。通常&#xff0c;这涉及到在监听循环中添加一个检查点&#xff0c;以便在接收到停…

vue-生命周期+工程化开发(三)

生命周期 Vue 生命周期 和 生命周期的四个阶段 思考&#xff1a; 什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09;什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a;一个Vue实例从 创建…

【办公类-23-02】20240212徐迟《江南小镇(南浔古镇)》“水晶晶”和景物”数量提取66个

作品展示 背景需求&#xff1a; 2024年春节前夕&#xff0c;我与家人前往浙江湖州、南浔旅行。探寻母亲、外婆外公、曾外婆的祖籍南浔的风土人情。在古镇上看到了”著名诗人“徐迟”的介绍。 母亲说&#xff1a;我的姑母就是在南浔读了小学和中学&#xff0c;她小学时的老师就…

PKI - 借助Nginx 实现Https_使用CA签发证书

文章目录 Pre概述操作步骤1. 生成 CA 密钥对2. 生成自签名的 CA 证书3. 生成服务器密钥对和证书签名请求 (CSR)4. 使用 CA 签署服务器证书 Nginx Https 自签证书1. 生成自签名证书和私钥2. 配置 Nginx 使用 CA签发的 HTTPS 证书3. 重启 Nginx 服务4. 直接访问5. 不验证证书直接…

Junit5基础教程

文章目录 一&#xff0c;导入依赖二&#xff0c;基本功能一、常用断言二、执行顺序和常用注解1、通过BeforeAll类的注解来保证顺序2、通过order注解来保证执行顺序 三、依赖测试四、参数化测试五、测试套件SelectPackages、IncludePackages、SelectClasses、IncludeTags等注解的…

Spark MLlib

目录 一、Spark MLlib简介 &#xff08;一&#xff09;什么是机器学习 &#xff08;二&#xff09;基于大数据的机器学习 &#xff08;三&#xff09;Spark机器学习库MLlib 二、机器学习流水线 &#xff08;一&#xff09;机器学习流水线概念 &#xff08;二&#xff09…

Vue核心基础2:事件处理 和 事件修饰符

1 事件处理 1.1 点击事件 <body><div id"root"><h1>姓名&#xff1a; {{ name }}</h1><h1>地址&#xff1a; {{ address }}</h1><!-- <button v-on:click"showInfo">提示信息</button> --><!-…