原题网址

题意不再赘述

  我们思考区间滑动的性质: 假设区间为[l,l+k],滑动至[l+1,l+k+1],此时a数组中减少了al,增加了ar+1,b数组对应也减少了bl,增加了br+1,题目要求滑动之后的窗口仍然为重排,这就意味着{al,ar+1}={bl,br+1},此时可能有俩种情况:

  1. al=bl,ar+1=br+1
  2. al=br+1,ar+1=bl

这时我们可以将整个a数组分为k组,每组相邻的俩个数下标相差k,即Ti={ai,ai+k,ai+2k...}(i∈1,2,3...k)此时题目可以转化为对于每组来说,要使Tib为Tia的重排

这时我们再讨论:

  1. Tia中每个数都一样,此时Tib只要保证每个数都一样即可
  2. Tia存在不一样的数,此时Tib的每一位都要与Tia相同

2的证明如下:假设a1,a1+k,a1+2k为{1,1,2} 如果让b1+k=2,b1+2k=1,此时就后面俩个数来说是满足之前的关系的,但是如果考虑前面俩个数就会发现

{a1,a1+k}≠{b1,b1+k}因此我们要保证Tia的每一位都与Tib相同

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ull unsigned long long
const int N=2e5+5;
int n,k;
void solve(){
    cin>>n>>k;
    vector<int> a(n),b(n);
    for(int i=0;i<n;i++)cin>>a[i];
    for(int i=0;i<n;i++)cin>>b[i];
    vector<int> st(k);
    unordered_map<int,int> mp;
    for(int i=0;i<k;i++){
        st[i]=a[i];
        for(int j=i+k;j<n;j+=k){
            if(a[j]!=st[i])st[i]=-1;
        }
        if(st[i]!=-1)mp[st[i]]++;
        else{
            for(int j=i;j<n;j+=k){
                if(b[j]!=-1 && b[j]!=a[j]){
                    cout<<"NO\n";
                    return;
                }
            }
        }
    }
    int cnt1=0;
    for(int i=0;i<k;i++){
        if(st[i]!=-1){
            set<int> v;
            for(int j=i;j<n;j+=k)v.insert(b[j]);
            v.erase(-1);
            if(v.size()>=2){
                cout<<"NO\n";
                return;
            }else if(v.size()==1){
                int x=*v.begin();
                if(!mp.count(x)){
                    cout<<"NO\n";
                    return;
                }else{
                    mp[x]--;
                    if(mp[x]==0)mp.erase(x);
                }
            }else cnt1++;
        }
    }
    int sum=0;
    for(auto it=mp.begin();it!=mp.end();it++){
        sum+=it->second;
    }
    if(cnt1==sum)cout<<"YES\n";
    else cout<<"NO\n";

}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int _=1;
    cin>>_;
    while(_--)solve();
}

          

posted on 2026-04-30 15:26  LeoCodex  阅读(4)  评论(0)    收藏  举报