每日一题~ Birthday Cake+19浙江省赛 I(字符串哈希,匹配)(哈希判断回文串,奇偶性质的博弈)

添加链接描述
题意:
n 个字符串,两两组合,问有几对能形成 AA 串。
n<=4e5

分析:
符合条件的有两种
1.有多个A 串,对答案的贡献是 cnt*(cnt-1)/2
2.有形如 ABA 的串,这时,我们需要寻找 B 串的数量。对答案的贡献就是 B的数量。

我们使用哈希来处理字符串。

#include <bits/stdc++.h>
using namespace std;
#define ll long long 
#define pii pair<ll,ll>
ll mod1=1e9+7,mod2=1e9+9;
ll bas=131;
const int maxn=4e5+5;
pii res[maxn];
map<pii,ll>mp;//计算 个数的
ll ha1[maxn],ha2[maxn],p1[maxn],p2[maxn];
ll get1(int l,int r)
{return (ha1[r]-ha1[l-1]*p1[r-l+1]%mod1+mod1)%mod1;
}
ll get2(int l,int r)
{return (ha2[r]-ha2[l-1]*p2[r-l+1]%mod2+mod2)%mod2;
}
pii get(int l, int r)
{return {get1(l,r),get2(l,r)};
}void solve()
{int tot=0;p1[0]=p2[0]=1;for (int i=1;i<maxn;i++){p1[i]=p1[i-1]*bas%mod1;p2[i]=p2[i-1]*bas%mod2;}int n;cin>>n;string t;while(n--){cin>>t;int len=t.size();ha1[0]=ha2[0]=0;for (int i=1;i<=len;i++){ha1[i]=ha1[i-1]*bas%mod1+t[i-1]-'a'+1;ha2[i]=ha2[i-1]*bas%mod2+t[i-1]-'a'+1;ha1[i]%=mod1;ha2[i]%=mod2;}mp[{ha1[len],ha2[len]}]++;// j 代表 偏移量,这里试图将 string t 拆成 ABA 类型的。//我们枚举两边的 A,将中间 的B放到数组中存起来。//  j 代表A的长度for (int j=1;j+j<len;j++){if (get(1,j)==get(len-j+1,len)){res[tot++]=get(j+1,len-j);}}}ll ans=0;for (int i=0;i<tot;i++){ans+=mp[res[i]];}for (auto i:mp){ans+=i.second*(i.second-1)/2;}cout<<ans<<"\n";
}
int  main()
{std::cin.tie(nullptr)->sync_with_stdio(false);int t; t=1;//cin>>t;while(t--){solve();}return 0;
}

添加链接描述
题意:
有一个字符串
每一个人每轮 在字符串 的头部 或 尾部 删去一个字母。
未操作和操作之后,都认为a 拥有这个字符串
如果 a 拥有字符串的时候,是回文串,那么a输。
(换言之,如果一开始 是回文,那么先手输。之后谁操作之后是回文,谁输)。
n 长的字符串,q 次询问。
每次询问 l r。也就是这一局,两人玩的字符串是 [l r] 的子串。
问谁赢。
思考:
如果 一开始 字符串是 回文的,那么先手输。
如果一开始不是回文 ,
我们来考虑一下 一定失败的状态。本身的字符串不是回文,但是不论删除首字母还是尾字母。新的字符串都是回文。
我们可以列举一些 这样的字符串 ab baba 我们可以发现构造出来的都是偶数。
奇数的出不来。可以自己构造一下3个长度的 字符串。
所以我们可以判断 初始的串的长度的奇偶性。
如果一开始 是奇数,那么先手操作的时候一定是奇数。后手操作的时候一定是偶数。
所以 如果为奇数,先手输。否则 后手输。
通过哈希来判断回文 ,主要是 处理一个 ha[N] 和一个 rha[N] 数组。
rha 里面存储的是 倒叙,如果两者相等,那么说明是 回文的。

这里的处理要注意一下。

#include <bits/stdc++.h>
using namespace std;
#define ll long long 
#define pll pair<ll,ll>
const int N=1e6+5;
ll ha1[N],rha1[N],p1[N],bas=13331;
ll ha2[N],rha2[N],p2[N];
ll mod1=1e9+7;ll mod2=1e9+9;
int  n,q;
ll get1(int l,int r)
{return (ha1[r]-ha1[l-1]*p1[r-l+1]%mod1+mod1)%mod1;
}
ll get2(int l,int r)
{return (ha2[r]-ha2[l-1]*p2[r-l+1]%mod2+mod2)%mod2;
}
ll getr1(int l,int r)
{return (rha1[n-l+1]-rha1[n-r]*p1[r-l+1]%mod1+mod1)%mod1;
}
ll getr2(int l,int r)
{return (rha2[n-l+1]-rha2[n-r]*p2[r-l+1]%mod2+mod2)%mod2;
}
pll get(int l,int r)
{return {get1(l,r),get2(l,r)};
}
pll getr(int l,int r)
{return {getr1(l,r),getr2(l,r)};
}
void solve()
{cin>>n>>q;string s;cin>>s;p1[0]=1;p2[0]=1;for (int i=1;i<=n;i++){p1[i]=p1[i-1]*bas%mod1;p2[i]=p2[i-1]*bas%mod2;}for (int i=1;i<=n;i++){ha1[i]=ha1[i-1]*bas%mod1+s[i-1]-'a'+1;ha2[i]=ha2[i-1]*bas%mod2+s[i-1]-'a'+1;rha1[i]=rha1[i-1]*bas%mod1+s[n-i]-'a'+1;rha2[i]=rha2[i-1]*bas%mod2+s[n-i]-'a'+1;ha1[i]%=mod1;ha2[i]%=mod2;rha1[i]%=mod1; rha2[i]%=mod2;}int l,r;while(q--){cin>>l>>r;if (get(l,r)==getr(l,r)){cout<<"Budada\n";}else {int len=r-l+1;if (len&1){cout<<"Putata\n";}else cout<<"Budada\n";}}return ;
}
int  main()
{std::cin.tie(nullptr)->sync_with_stdio(false);int t; t=1;//cin>>t;while(t--){solve();}return 0;
}

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

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

相关文章

产品架构图的设计如果你能让老板一看明白,那么要恭喜你了!哈哈

产品架构图的设计&#xff1a;如果你能让老板一看明白&#xff0c;那么要恭喜你了&#xff01;哈哈 艾斯视觉观点认为&#xff1a;在产品开发的过程中&#xff0c;架构图是沟通产品设计理念和实现方式的重要工具。它不仅需要清晰地展示产品各组件之间的关系&#xff0c;还要能…

[前端]解决Iframe即使设置高度100%,但还是显示滚动条scrollbar的问题

前言 好烦,你看看这两个重复的滚动条. 一个是来自iframe,另一个来自父级的div(overflow: auto;) 我已经在css中设置了iframe的height: 100%;border: none;,但无论如何还是显示出了父级的scrollbar 解决 将iframe的display: block;即可. 或者vertical-align: bottom;

GIT新手提交操作

1、创建一个本地分支 进入Xshell已经拉取的该项目的项目代码路径下执行git checkout -b 姓名全拼音&#xff0c;例如&#xff1a;git checkout -b xiewei&#xff0c;当前显示已创建。 cuihengyidell-PowerEdge-T550:~/SVN/Git_R11/R11_V4.02.0_Source$ git checkout -b cuih…

【NoSQL数据库】Redis知识小册

一、缓存穿透 缓存穿透是先查Redis&#xff0c;发现缓存中没有数据&#xff0c;再查数据库。然而&#xff0c;如果查询的数据在数据库中也不存在&#xff0c;那么每次查询都会绕过缓存&#xff0c;直接落到数据库上。 解决方案一、缓存空数据 查询Redis缓存&#xff1a;首先查…

微信小程序之调查问卷

一、设计思路 1、界面 调查问卷又称调查表&#xff0c;是以问题的形式系统地记载调查内容的一种形式。微信小程序制作的调查问卷&#xff0c;可以在短时间内快速收集反馈信息。具体效果如下所示&#xff1a; 2、思路 此调查问卷采用服务器客户端的方式进行设计&#xff0c;服…

Kafka快速入门+SpringBoot简单的秒杀案例

1. 主题相关 1.1 创建主题 kafka-topics.sh --create --bootstrap-server [服务器地址] --replication-factor [副本数] --partitions [分区数] --topic [主题名]liberliber-VMware-Virtual-Platform:/home/zookeeper$ docker-compose exec kafka /bin/bash #进入kafka容器 b…

【JavaScript】跨页面通信

Cookie&#xff1a;通过在⻚⾯间共享 Cookie 实现简单的跨⻚⾯通信&#xff0c;但是 Cookie ⼤⼩有限制&#xff0c;不能存储过多的数据。localStorage 和 sessionStorage&#xff1a;HTML5 提供了本地存储的能⼒&#xff0c;可以通过 localStorage 或 sessionStorage 实现⻚⾯…

全网最详细Gradio教程系列5——Gradio Client: python

全网最详细Gradio教程系列5——Gradio Client: python 前言本篇摘要5. Gradio Client的三种使用方式5.1 使用Gradio Python Client5.1.1 安装gradio_client5.1.2 连接Gradio应用程序1. 通过URL连接2. 通过SpaceID连接3. 辅助&#xff1a;duplicate()和hf_token4. Colab Noteboo…

Java 并发编程:一文了解 Java 内存模型(处理器优化、指令重排序与内存屏障的深层解析)

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 022 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

使用AI大模型统计英语四六级试题高频词汇

引子 前些年我做过商品搜索&#xff0c;当时为了优化一些搜索词和搜索关联提示&#xff0c;接触到一点NLP的知识。所以后来有一场非全日制的研究生考试&#xff0c;为了高效的复习英语单词&#xff0c;我爬取了往年的历史真题数据&#xff0c;以及其他模拟等各种试题的数据。然…

AcWing最长连续不重复子序列

哈希表就完事儿了&#xff0c;key是a[j],value是a[j]出现次数 i丢到前面&#xff0c;j丢到后面&#xff0c;然后j往后面遍历&#xff0c;每次记录a[j]出现次数 m a p [ a [ j ] ] map[a[j]] map[a[j]]&#xff0c;如果a[j]出现次数2次及其以上 m a p [ a [ j ] ] > 1 map[a[…

《Python 基础方法的奇妙回顾之旅》

1.学习内容 1.1本篇博客主要是学过的方法进行总结: 1.1.1 print&#xff08;&#xff09;方法 print方法是Python中最常用到的方法&#xff0c;print() 方法用于将指定的对象输出到控制台。 语法&#xff1a;print(*objects, sep , end\n, filesys.stdout, flushFalse) o…

Element Plus 动态编辑标签Tag使用@keyup.enter与@Blur冲突问题,

这是官方文档示例代码,文档具体链接https://element-plus.org/zh-CN/component/tag.html 问题描述: 发现存在使用keyup.enter与Blur冲突问题, keyup.enter(就是按回车键)发现handleInputConfirm方法被执行了两次,下面是问题代码 <template> <div class"flex ga…

【数据中心】数据中心的IP封堵防护:构建网络防火墙

在现代数据中心中&#xff0c;IP封堵防护是构建网络防火墙的基石。它通过阻止恶意IP地址的访问&#xff0c;有效防范各种网络攻击。本文将介绍数据中心中IP封堵防护的原理、实施方法及其在网络防火墙中的重要性。 IP封堵防护的原理 IP封堵防护是指根据预定义的策略&#xff0…

PS5测试更新推送自适应充电功能:自带充电器码

原标题&#xff1a;PS5 更新推送自适应充电功能&#xff1a;仅适用于新型号 易采游戏网7月26日消息&#xff1a;近年来&#xff0c;游戏界的科技进步日新月异&#xff0c;各大厂商不断推出新的功能和技术来吸引玩家。作为游戏机市场的领导者之一&#xff0c;索尼的PlayStation…

git 如何撤销提交的日志

前言: 在Git中&#xff0c;如果你已经提交了一个更改并且想要撤销这个提交但保留更改&#xff08;即撤销commit但保留working directory和index中的更改&#xff09;&#xff0c;你可以使用git reset命令。如果你想要撤销commit并且丢弃所有的更改&#xff0c;你可以使用git r…

Docker Minio rclone数据迁移

docker minio进行数据迁移 使用rclone进行数据迁移是一种非常灵活且强大的方式&#xff0c;特别是在处理大规模数据集或跨云平台迁移时。rclone是一款开源的命令行工具&#xff0c;用于同步文件和目录到多种云存储服务&#xff0c;包括MinIO。下面是使用rclone进行数据迁移至Mi…

学习型组织:知识创造的 SECI 螺旋模型 —— 隐性知识和显性知识的转换

《创造知识的企业》的日本学者野中郁次郎用了 30 多年的时间跟踪日本企业的变化&#xff0c;揭示日本企业成功的奥秘。 在野中之前和之后&#xff0c;也有不少学者聚焦日本&#xff0c;但是&#xff0c;多数人看到的&#xff0c;只是优良的生产技术&#xff0c;企业和顾客、供…

打卡Datawhale第一天!!!

最近参加了Datawhale的一个活动学习一些有趣的知识。 官方发的教程还是挺详细的嘛&#xff0c;跟着官方教程走&#xff0c;基本没什么错误 跑模型中... 跑完咯...gpu跑得就是快 等待评分... 最后结果&#xff1a; 总结&#xff1a;这次都是跟着教程来走的 &#xff0c;希望在后…

力扣高频SQL 50题(基础版)第十八题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第十八题1633. 各赛事的用户注册率题目说明思路分析实现过程准备数据实现方式结果截图 力扣高频SQL 50题&#xff08;基础版&#xff09;第十八题 1633. 各赛事的用户注册率 题目说明 用户表&#xff1a; Users --…