首页 > 其他分享 >哈希接近o1查找字符串

哈希接近o1查找字符串

时间:2023-04-13 22:36:38浏览次数:50  
标签:ull int len 因子 查找 哈希 ans query o1

P3538 [POI2012]OKR-A Horrible Poem

/*
把这个人的因子分成
循环节的因子:
循环次数的因子:
把循环次数的因子除去,也就是循环节的因子了

循环节肯定是由某些因子组成的
把因子从小到大除一次就可以了
如果能够除掉这个因子,那除掉就一定是最有的


*/
#include <bits/stdc++.h>
using namespace std;
const int M=5e5+5;
using ull=unsigned long long;
const ull P=131;

ull base[M],num[M];
char s[M];

int g[M];
vector<int>prime;
void init(int n) {
    for(int i=2;i<=n;i++) {
        if(g[i]==0)prime.push_back(i),g[i]=i;
        for(auto j:prime) {
            if(i*j>n)break;
            g[i*j]=j;
            if(i%j==0)break;
        }
    }
    base[0]=1;
    for(int i=1;i<=n;i++) {
        base[i]=base[i-1]*P;
        num[i]=num[i-1]*P+s[i];
    }
}

ull query(int l,int r) {
    return num[r]-num[l-1]*base[r-l+1];
}

int main() {
    int n;
    scanf("%d",&n);
    scanf("%s",s+1);
    init(n);
    int q;cin>>q;
    while(q--) {
        int l,r,len,ans;
        scanf("%d%d",&l,&r);
        len=ans=r-l+1;
        if(query(l+1,r)==query(l,r-1)) {
            puts("1");
            continue;
        }
        while(len>1) {
            if(query(l+ans/g[len],r)==query(l,r-ans/g[len]))ans/=g[len];
            len/=g[len];
        }
        printf("%d\n",ans);
    }
    return 0;
}

标签:ull,int,len,因子,查找,哈希,ans,query,o1
From: https://www.cnblogs.com/basicecho/p/17316779.html

相关文章

  • 数组的元素查找排序
    顺序查找顺序查找:挨个查看要求:对数组元素的顺序没要求publicstaticvoidarraySearch(intvalue){int[]arr={4,5,6,1,9};//intvalue=1;intindex=-1;for(inti=0;i<arr.length;i++){if(arr[i]......
  • [USACO12MAR]Flowerpot S 单调队列
    [USACO12MAR]FlowerpotStag:单调队列很惭愧,今天发现自己连滑动窗口都不会了,遂做了一些题两滴水的高度之差大于等于D的情况下的最小花盆宽度暴力思路:对于任意两点求水滴高度差是否大于等于D,若大于等于\(D\)则计算最下的两点距离\(w\)但这显然是能过但不完全过,手玩一下样例,是......
  • django 1.8 官方文档翻译: 2-5-7 自定义查找
    自定义查找NewinDjango1.7.Django为过滤提供了大量的内建的查找(例如,exact和icontains)。这篇文档阐述了如何编写自定义查找,以及如何修改现存查找的功能。关于查找的API参考,详见查找API参考。一个简单的查找示例让我们从一个简单的自定义查找开始。我们会编写一个自定义查找ne,提供......
  • 哈希表理论基础——学习笔记
    常见的三种哈希结构数组set(集合)map(映射)HashSet特点:HashSet无序(没有下标),不可重复HashSet为HashMap的key部分TreeSetTreeSet无序(没下标),不可重复,但是可以排序TreeSet为TreeMap的key部分mapMap和Collection没有继承关系Map以(k......
  • 15.72011年42题真题_查找两个序列A和B的中位数
    #include<iostream>intMidSearch(int*A,int*B,intn){//分别表示序列A和序列B的首位数,末位数和中位数,s是start简写,d是end简写ints1=0,d1=n-1,m1,s2=0,d2=n-1,m2;//循环判断结束条件是,两个数组均不断删除最后均只能剩余一个元素while(......
  • 二叉树的前、中、后序遍历以及查找-Java实现
    对于遍历不过多的赘述,关于查找有关的思想,关键是如何实现查找的顺序以及结果的回传;附代码1packagedataSrtuct;23publicclassBinaryTreeDemo{4publicstaticvoidmain(String[]args){5BinaryTreebinaryTree=newBinaryTree();6......
  • JS 根据key查找对象数组中符合的一项 返回对象(递归)
    在一个复杂的数组对象数据中(嵌套多层),通过key值返回对应的对象1方法:parseJson(jsonObj,key,value){//循环所有键letarray=[]for(letvinjsonObj){letelement=jsonObj[v]//1.判断是对象或者数组if(typeof(ele......
  • 19、哈希表
    1、字符串中的第一个唯一字符387-字符串中的第一个唯一字符publicclassFirstUniqChar{publicintfirstUniqChar(Strings){int[]freq=newint[26];for(inti=0;i<s.length();i++)freq[s.charAt(i)-'a']++;for(inti=......
  • 哈希表:剑指 Offer 48. 最长不含重复字符的子字符串
    题目描述:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。   提示:s.length<=40000 思路:双指针(滑动窗口)+哈希表:   复杂度分析:时间复杂度O(N):其中N为字符串长度,动态规划需遍历计算dp列表。空间复杂度O(1......
  • 哈希表:剑指 Offer 03. 数组中重复的数字
    题目描述:找出数组中重复的数字。在一个长度为n的数组nums里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。   限制:2<=n<=100000 哈希表/Set利用数据......