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

BZOJ2372 music

思路

两个字符串等价,相当于两个串中排名相同的字符,出现的位置相同。

于是我们哈希,分别维护每种字符的出现位置序列。
现在瓶颈在于得到每种字符的排名。
发现字符集只有 \(25\),可以直接枚举,桶排即可。然后再枚举判断对应排名的字符出现位置是否相同即可。

枚举一遍 \(B\)\(A\) 中可能出现的位置,复杂度 \(O(25n)\)

代码

const int N = 1e5+10,M = 2.5e4+10;
const ull base = 2333;
int n,m,c,a[N],b[M],cnt[26];
ull mul[N],hb[26],ha[26],h1[26][N],h2[26][M],B,A;
inline ull hs(ull h[],int l,int r){return h[r]-h[l-1]*mul[r-l+1];
}
inline int check(){for(int i=1;i<=25;++i) if(ha[i]!=hb[i]) return 0;return 1;
}
vector <int> ans;
int main(){// freopen("in.in","r",stdin); // freopen("out.out","w",stdout);read(n,m,c);if(n<m){puts("0");return 0;}mul[0] = 1;for(int i=1;i<=n;++i) mul[i] = mul[i-1]*base;for(int i=1;i<=n;++i){read(a[i]);for(int j=1;j<=25;++j) h1[j][i] = h1[j][i-1]*base+(a[i]==j)*base;}for(int i=1;i<=m;++i){read(b[i]);++cnt[b[i]];for(int j=1;j<=25;++j) h2[j][i] = h2[j][i-1]*base+(b[i]==j)*base;}for(int i=1,d = 0;i<=25;++i) if(cnt[i]) hb[++d] = h2[i][m];for(int i=1;i<=25;++i) cnt[i] = 0;for(int i=1;i<=m-1;++i) ++cnt[a[i]];for(int l=1,r=m;r<=n;++l,++r){--cnt[a[l-1]];++cnt[a[r]];for(int j=1;j<=25;++j) ha[j] = 0;for(int j=1,d = 0;j<=25;++j) if(cnt[j]) ha[++d] = hs(h1[j],l,r);if(check()) ans.push_back(l);}printf("%d\n",(int)ans.size());for(int i=0;i<(int)ans.size();++i) printf("%d\n",ans[i]);// fclose(stdin);// fclose(stdout);return 0;
}
http://www.jsqmd.com/news/41268/

相关文章:

  • P11664 [JOI 2025 Final] 缆车 / Mi Telefrico
  • WPF中RelayCommand的完成与使用详解
  • C++篇(14)二叉树进阶算法题 - 详解
  • Python 潮流周刊#127:Python 3.16 JIT 性能提升计划
  • 非线性序列密码结构
  • 2025/11/15
  • LoongOS 上传文件
  • 基础设施即服务(IaaS)全面解析:云计算的基石
  • CentOS 7 通过 Packstack 安装 OpenStack Train 完整步骤
  • 【STM32工程开源】基于STM32的人体健康监测环境
  • 实用指南:【C# OOP 入门到精通】从基础概念到 MVC 实战(含 SOLID 原则与完整代码)
  • tailwind自定义class问题小记
  • 2025年主流开源AI智能体框架平台概览 - 实践
  • threading.local()的实例化机制
  • Tarjan复建
  • 采用git进行项目管理
  • Golang游戏开发笔记:地图索引系统实现
  • 20251115
  • 网络爬虫:简单静/动态网页
  • 20232307 2024-2025-1 《网络与系统攻防技术》实验五实验报告
  • EXECUTE IMMEDIATE语句分析
  • 产品更新与重构策略:创新与稳定的平衡之道 - 详解
  • MySQL MVCC实现原理
  • 算法第三次作业
  • 算法第三次作业
  • 完整教程:《简易制作 Linux Shell:详细分析原理、设计与实践》
  • 计算机网络5 - 指南
  • 2025年境外商务出差保险哪里有卖:TOP10平台专业解析
  • 2025年开除申诉靠谱机构推荐:专业学术申诉机构评测指南!
  • Day39(9)F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project01\jdbc-demo+springboot-web-quickstart