传送门:Beads

思路:

暴力枚举每一种长度,同时正着算一遍哈希值再反着算一遍哈希值,计算每一种长度的区间时算正向的哈希值和反向的哈希值,用一个set存最小的那一个,最后set里面的元素个数就是长度为k的区间所能得到的不同区间的个数。

时间复杂度为调和级数式,O(NlogN).

代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
typedef unsigned long long ull;
const int pp=13331,N=2e5+10;
int a[N];
set<ull>v;
ull p[N];
int ans[N],cnt;
ull s[N];
ull s1[N];
int n;
ull get(ull a[],int l,int r)
{return a[r]-a[l-1]*p[r-l+1];
}
ull get1(ull a[],int l,int r)
{return a[l]-a[r+1]*p[r-l+1];
}
int get_ans(int x)
{v.clear();for(int i=1;i+x-1<=n;i+=x){int r=i+x-1;ull t=min(get(s,i,r),get1(s1,i,r));v.insert(t);}return  (int)v.size();
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);p[0]=1;for(int i=1;i<=n;i++){s[i]=s[i-1]*pp+a[i];p[i]=p[i-1]*pp;}for(int i=n;i;i--){s1[i]=s1[i+1]*pp+a[i];}int sum=0;for(int i=1;i<=n;i++){int t=get_ans(i);if(t==sum) ans[++cnt]=i;else if(t>sum){sum=t,cnt=0;ans[++cnt]=i;}}cout<<sum<<' '<<cnt<<endl;for(int i=1;i<=cnt;i++)cout<<ans[i]<<' ';return 0;
}

字符串哈希——Beads相关推荐

  1. ELFhash - 优秀的字符串哈希算法

    原 ELFhash - 优秀的字符串哈希算法 分类:算法杂论算法精讲数据结构 (1424)  (2) 1.字符串哈希: 我们先从字符串哈希说起 在很多的情况下,我们有可能会获得大量的字符串,每个字符串 ...

  2. 【CodeForces】961 F. k-substrings 字符串哈希+二分

    [题目]F. k-substrings [题意]给定长度为n的串S,对于S的每个k-子串$s_ks_{k+1}...s_{n-k+1},k\in[1,\left \lceil \frac{n}{2} ...

  3. 138. 兔子与兔子【字符串哈希】

    很基础的字符串哈希 #include<bits/stdc++.h> using namespace std; typedef unsigned long long int ull; con ...

  4. Singing Superstar 字符串哈希-map操作

    题意 : 给一长度 < 1e5 的字符串s,q < 1e5次询问,每次问一个长 < 30 的串 t 在s中出现的次数,且t不可重叠. 例 : "abababa"中 ...

  5. 中石油训练赛 - DNA(字符串哈希)

    题目链接:点击查看 题目大意:给出一串只由A,C,G,T组成的字符串,再给出一个数字k,问每个长度为k的连续子串,出现的次数最多是多少次 题目分析:O(n)哈希一下,O(n)更新一下用无序map维护的 ...

  6. HDU - 3613 Best Reward(字符串哈希)

    题目链接:点击查看 题目大意:给出一个字符串,每个字母都有一个贡献值,现在要将这个字符串拆成两个子串,如果子串是回文串的话,贡献就是其中每个字母的贡献和,现在问贡献最大为多少 题目分析:很简单的一道回 ...

  7. 怎么把字符串变成数组_字符串哈希:从零开始的十分钟包会教程

    大家吼啊!这是我下定决心写专栏以来的第二篇文章,请大家多多资瓷!!同样我们先以上次的话起头吧! 恭喜你找到了这篇博客!虽然这个标题看起来非常像是nc营销号的标题但是!请相信我一次这是真的!如果不行请随 ...

  8. [Leetcode][程序员面试金典][面试题17.13][JAVA][恢复空格][动态规划][Trie][字符串哈希]

    [问题描述][中等] [解答思路] 1. 动态规划 动态规划流程 第 1 步:设计状态 dp[i] 表示字符串的前 i 个字符的最少未匹配数. 第 2 步:状态转移方程 假设当前我们已经考虑完了前 i ...

  9. 【牛客 -2A】矩阵(二分,字符串哈希)

    题干: 给出一个n * m的矩阵.让你从中发现一个最大的正方形.使得这样子的正方形在矩阵中出现了至少两次.输出最大正方形的边长. 输入描述: 第一行两个整数n, m代表矩阵的长和宽: 接下来n行,每行 ...

最新文章

  1. App移动端性能工具调研
  2. leetcode:203. 移除链表元素(两种方法)
  3. python基础技巧总结(一)
  4. 吐槽大会4_《吐槽大会4》不愧都是国家队,真吐槽!孙杨霸气喊话霍顿
  5. 京东将回购计划授权增至30亿美元并延期至2024年
  6. 概率图模型笔记(一)开坑
  7. 软件测试总结--01基础
  8. 工具使用教程 (一)【Git从原理到入门实用教程】
  9. 解决在IE浏览器中JQuery.resize()执行多次的方法(转)
  10. 虚拟光驱安装服务器无法运行,Win7新装虚拟光驱无法打开的解决方法
  11. 实践致知第6享:QQ截图的文字识别功能
  12. 如何提高团队的研发效率呢?
  13. chart metadata is missing these dependencies
  14. 利用QVOD架设流媒体服务器/电影服务器/vod服务器
  15. 【北邮国院大三上】电子商务法(e-commerce law)知识点整理——Banking Lawe-Payment
  16. 在B站,没有什么是不能搞CP的
  17. 【@NotNull和@NotBlank的区别】
  18. jacoco—增量代码覆盖率实现
  19. Alphabet 超越苹果成为全球市值最高公司
  20. Java小技能:异常处理

热门文章

  1. 2022年[最新]泰晤士高等教育世界大学声誉排名(完整版)
  2. antd 的upload组件结合oss实现图片上传
  3. Layui lay-skin=switch 表格修改状态
  4. 程序员修炼之路(十)程序员必读经典书籍和成长路线
  5. 小资之豆浆篇 (IS2120@BG57IV3)
  6. v-if多个条件判断语句
  7. C# Winform 自定义 日程日历控件
  8. 账号和权限管理之管理用户账号和组账号
  9. JAVA文件复制和文件加密存储
  10. MySQL update正在执行中突然断电,数据是否更改成功?