This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<cstdio>
#include<cstring>
#include<algorithm>
 
const int mod1 = 1000000007, mod2 = 1000000009;
 
char a[2222],b[2222];
 
std::pair<int,int> d[2222222];
int dn;
 
std::pair<int,int> p[33];
 
int isprime(int x)
{
    int i;
    for(i=2;i*i<=x;i++)if(x%i==0)return 0;
    return 1;
}
 
int main()
{
    std::pair<int,int> P;
    int i,j,n,m,r=0;
    scanf("%s%s",a,b);
    n=strlen(a);m=strlen(b);
    p[0].first=p[0].second=1;
    for(i=1;i<26;i++)
    {
        p[i].first=2003LL*p[i-1].first%mod1;
        p[i].second=2003LL*p[i-1].second%mod2;
    }
    for(i=0;i<n;i++)
    {
        P.first=P.second=0;
        for(j=i;j<n;j++)
        {
            P.first=(P.first+p[a[j]-97].first)%mod1;
            P.second=(P.second+p[a[j]-97].second)%mod2;
            d[dn++]=P;
        }
    }
    std::sort(d,d+dn);
    for(i=0;i<m;i++)
    {
        P.first=P.second=0;
        for(j=i;j<m;j++)
        {
            P.first=(P.first+p[b[j]-97].first)%mod1;
            P.second=(P.second+p[b[j]-97].second)%mod2;
            if(std::binary_search(d,d+dn,P))r=std::max(r,j-i+1);
        }
    }
    printf("%d\n",r);
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |