P8892 「UOI-R1」磁铁 题解

yeshubo_qwq

2022-12-10 21:10:13

Solution

## Solution 操作 $2$ 使得磁铁 $a$ 本质为环,结合操作 $1$,可以删除任意位置的字符。 破环为链,以每个位置为起点进行判定,使用双指针可以做到 $O(n^2)$($n$ 为磁铁长度)。 ## Code ```cpp #include <bits/stdc++.h> //#define int long long using namespace std; int T,n,m,i,l,r,sum; string s,t; signed main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); cin>>T; while (T--){ cin>>s>>t; n=s.size(),s=" "+s+s; m=t.size(),t=" "+t; if (n<m){ cout<<"N\n"; continue; } for (i=1;i<=n;i++){ l=i,r=1,sum=0; while (l<=i+n-1 && r<=m) if (s[l]==t[r]) l++,r++,sum++; else l++; if (sum==m) break; } cout<<(i>n?"N\n":"Y\n"); } return 0; } ```