70pts求条
查看原帖
70pts求条
1230506
OIer_bcx_楼主2025/8/4 11:17
#include<bits/stdc++.h>
using namespace std;
int h1[100001],h2[100001],p[100005]={1};
signed main(){
    for(int i=1;i<=1e5;i++){
        p[i]=(p[i-1]*131)%1000000007;
    }
    int T;
    cin>>T;
    while(T--){
        memset(h1,0,sizeof(h1));
        memset(h2,0,sizeof(h2));
        int n,m;
        string s1,s2;
        cin>>n>>m>>s1>>s2;
        int seed=131,flg1=1,flg2=1;
        for(int i=0;i<n;i++){
            if(s1[i]!=s2[i]){
                flg1=0;
                break;
            }
        }
        for(int i=n-1,j=m-1;i>=0;i--,j--){
            if(s1[i]!=s2[j]){
                flg2=0;
                break;
            }
        }
        if(flg1==1||flg2==1){
            cout<<"Yes\n";
            continue;
        }
        for(int i=1;i<=n;i++){
            h1[i]=(h1[i-1]*seed+s1[i-1]-'a'+1)%1000000007;
        }
        for(int i=1;i<=m;i++){
            h2[i]=(h2[i-1]*seed+s2[i-1]-'a'+1)%1000000007;
        }
        bool f=0;
        for(int i=0;i<n;i++){
            if(h1[i]==h2[i]){
                int t1=(h1[n]-h1[i]*p[n-i]%1000000007+1000000007)%1000000007;
                int l=m-(n-i);
                int t2=(h2[m]-h2[l]*p[n-i]%1000000007+1000000007)%1000000007;
                if(t1==t2){
                    cout<<"Yes\n";
                    f=1;
                    break;
                }
            }
        }
        if(!f){
            cout<<"No\n";
        }
    }
    return 0;
}
2025/8/4 11:17
加载中...