Jumpring

시간 제한1초메모리 제한1024 MB

요약
S에서 인접한 두 문자를 동시에 지울 수 없다는 조건 아래, 문자를 삭제해 U를 만들 수 있는지 판별한다.
난이도

보통10점 중 6점

유형
동적 계획법, 문자열, 그리디, 배열
정답자
아직 제출이 없습니다

문제

길이가 NN인 문자열 S=s_1,s_2,⋯ ,s_NS=s\_1,s\_2,\cdots ,s\_N가 주어진다. 승우는 이 문자열에서 00개 이상의 문자를 제거하여 길이가 MM인 새로운 문자열 UU를 만들고자 한다. 두 문자열은 영어 소문자로 이루어져 있다.

이때 승우는 서로 인접한 두 문자를 제거할 수는 없다. 즉, 승우는 다음과 같이 문자를 제거한다.

  • 제거할 문자의 개수 K(0≤K≤⌈N2⌉)K(0\le K\le\lceil\frac{N}{2}\rceil)를 선택한다.
  • 길이가 KK인 정수열 x_1,x_2,⋯ ,x_K (1≤x_i≤N)x\_1,x\_2,\cdots ,x\_K\ (1\le x\_i\le N)을 구성한다. 이 정수열은 오름차순으로 정렬되어 있고, 인접한 두 수의 차가 22 이상이다.
  • SS에서 s_x_1,s_x_2,⋯ ,s_x_Ks\_{x\_1},s\_{x\_2},\cdots ,s\_{x\_K}를 제거한다.

SS에서 00개 이상의 문자를 제거하여 UU를 만들 수 있는지 판별하는 프로그램을 작성해 보자.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. (1≤T≤10,000)(1\leq T\leq 10\\, 000)

각 테스트 케이스의 첫째 줄에 NN과 MM이 공백으로 구분되어 주어진다. (1≤M≤N≤100,000)(1\le M\le N\le 100\\, 000)

각 테스트 케이스의 둘째 줄에 문자열 SS가 주어진다.

각 테스트 케이스의 셋째 줄에 문자열 UU가 주어진다.

SS와 UU는 영어 소문자로 이루어져 있으며, 모든 테스트 케이스에서 N×MN\times M의 합은 2×1072\times 10^7을 초과하지 않는다.

출력

각 테스트 케이스마다 SS를 UU로 만들 수 있다면 YES를, 만들 수 없다면 NO를 출력한다.

예제1

  1. 예제 1

    입력
    2
    7 4
    abcdefg
    aceg
    7 5
    abcdefg
    abefg
    
    예상 출력
    YES
    NO