ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

本质串 暴力hash

2021-07-14 19:29:31  阅读:152  来源: 互联网

标签:mmax ch hash 暴力 10 int 本质 ++ long


#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long mm;
const int m=2e5+50;
mm l,r,t[m],a[m],b[m],zxd=10;int v[m],n,num[m],d=0,k,mmax=0;
map<pair<mm,mm>,bool>q;
inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar();
    }
    return x*f;
}
inline void write(int x){
    if(x < 0){
        putchar('-'); x = -x;
    }
    if(x > 9){
        write(x/10);
    }
    putchar(x % 10 + '0');
}
int main ()
{
    scanf("%d",&n);t[0]=1;
    for (int i = 1; i <=n ; ++i)t[i]=t[i-1]*zxd,num[i]=read();//
    for (int i = 1; i <=n ; ++i) a[i]=a[i-1]*zxd+num[i],b[n-i+1]=b[n-i+2]*zxd+num[n-i+1];
    for (int i = 1; i <=n ; ++i) { k=0;
        if (n/i<mmax)break;//即使没有相同的本质串也比最大值mmax小
        for (int j = 1; j <=n/i ; ++j) {
            l=a[j*i]-a[i*j-i]*t[i];
            r=b[i*j-i+1]-b[i*j+1]*t[i];if(l>r)swap(l,r);
            if (!q[make_pair(l,r)]){
                q[make_pair(l,r)]=1;++k;
            }
        }q.clear();
        if (k>mmax){ d=0;mmax=k;//最大值k更新 d下标更新
            v[++d]=i;
        }else  if (k==mmax)
        {
            v[++d]=i;//k相同的存数组
        }
    }printf("%d %d\n",mmax,d);
    for (int i = 1; i <=d ; ++i) {
        write(v[i]);printf(" ");
    }
}

标签:mmax,ch,hash,暴力,10,int,本质,++,long
来源: https://blog.csdn.net/m0_51060847/article/details/118735151

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有