整了一节课了,样例都没过
查看原帖
整了一节课了,样例都没过
71956
dustbin1415楼主2021/5/30 22:14
#include <bits/stdc++.h>
using namespace std;
unsigned long long base = 131, a[110], b[110], p[110];
char str1[110], str2[110];
int len1, len2, ans1 = 0, ans2 = 0;
inline unsigned long long get_hash(unsigned long long h[], int l, int r)
{
    return h[r] - h[l - 1] * p[r - l + 1];
}
int main()
{
    p[0] = 1;
    scanf("%s", str1), scanf("%s", str2);
    len1 = strlen(str1), len2 = strlen(str2);
    for (int i = 1; i <= len1; i++)
        a[i] = a[i - 1] * base + str1[i];
    for (int i = 1; i <= len2; i++)
        b[i] = b[i - 1] * base + str2[i];
    for (int i = 1; i <= max(len1, len2); i++)
        p[i] = p[i - 1] * base;
    for (int i = 1; i <= max(len1, len2); i++)
    {
        if (len1 < i || len2 < i)
            break;
        //cout<<get_hash(a,1,i)<<' '<<get_hash(b,len2 - i + 1,len2)<<' '<<get_hash(b,1,i)<<' '<<get_hash(a,len1 - i + 1,len1)<<endl;
        ans1 = (get_hash(a, 1, i) == get_hash(b, len2 - i + 1, len2)) ? ans1 = i : 0;
        ans2 = (get_hash(b, 1, i) == get_hash(a, len1 - i + 1, len1)) ? ans2 = i : 0;
    }
    cout << max(ans1, ans2) << endl;
    return 0;
}

求大佬救救我

2021/5/30 22:14
加载中...