만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Pry 수열 변환

시간 제한2초메모리 제한512 MB

요약
가중치가 있는 삽입, 삭제, 교체 비용으로 두 문자열 A와 B 사이의 최소 편집 거리를 구하고, 예산 K를 넘으면 TOSS를 출력한다.
난이도

보통10점 중 7점

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

문제

Pry 수열은 소문자 알파벳 a부터 z까지만 이어 붙인 문자열이다. 새 Pry 수열을 기록하려면 이미 있는 수열에서 출발해 편집해야 하고, 편집 한 번마다 요금이 붙는다.

각 문자에는 값이 정해져 있다. val(a)=1\mathrm{val}(a) = 1, val(b)=2\mathrm{val}(b) = 2, val(c)=3\mathrm{val}(c) = 3, 같은 식으로 val(z)=26\mathrm{val}(z) = 26까지다.

기존 수열을 A=a1a2…anA = a_1 a_2 \dots a_n, 기록하려는 새 수열을 B=b1b2…bmB = b_1 b_2 \dots b_m이라고 하자. 쓸 수 있는 편집은 세 가지다.

  • 삽입: 원하는 위치에 문자 xx를 하나 넣는다. 요금은 1+val(x)/1001 + \mathrm{val}(x)/100이다.
  • 삭제: 원하는 위치의 문자 하나를 지운다. 요금은 문자와 무관하게 11이다.
  • 교체: 원하는 위치의 문자 yy를 문자 xx로 바꾼다. 요금은 (val(x)+val(y))/10(\mathrm{val}(x) + \mathrm{val}(y))/10이다.

예를 들어 ary를 tray로 바꾸는 한 가지 방법은 요금이 3.21이다. t를 넣어 tary를 만들고(1.2), a를 지워 try를 만들고(1), 다시 a를 넣어 tray를 만든다(1.01). 더 싸게 하는 방법도 있다. a를 t로 교체해 try를 만들고(2.1) a를 넣으면(1.01) 요금은 3.11이다.

AA와 BB, 그리고 예산 KK가 주어진다. AA에서 BB를 만드는 최소 요금을 구한다. 최소 요금이 KK보다 크면 그 수열은 아예 기록하지 않으므로, 요금 대신 TOSS를 출력한다.

입력

첫 줄에 테스트 케이스의 개수 TT (1≤T≤201 \le T \le 20)가 주어진다. 이어서 테스트 케이스마다 세 줄이 주어진다.

  • 첫 줄에 예산 KK (정수, 0≤K≤1000 \le K \le 100)
  • 둘째 줄에 기존 Pry 수열 AA
  • 셋째 줄에 새 Pry 수열 BB

두 수열은 공백이나 구두점 없이 소문자 알파벳만 이어 붙인 형태로 주어지고, 길이는 각각 1≤n≤200001 \le n \le 20000, 1≤m≤200001 \le m \le 20000을 만족한다.

출력

TT개의 줄을 출력한다. ii번째 줄에는 ii번째 테스트 케이스의 답을 쓴다. 최소 요금이 KK 이하이면 그 요금을 소수점 아래 넷째 자리까지 정확히 출력하고, KK보다 크면 TOSS를 출력한다. 나올 수 있는 요금은 모두 0.01의 배수이므로 넷째 자리까지 쓴 표기는 오차 없이 결정된다.

예제3

  1. 예제 1

    입력
    3
    4
    ary
    tray
    5
    llllammpptp
    llllammpppt
    3
    bcabcabcabcabcabca
    abcbacabcabacbcabc
    
    예상 출력
    3.1100
    2.1600
    TOSS
    
  2. 예제 2

    입력
    6
    1
    a
    b
    3
    z
    y
    2
    a
    az
    2
    q
    qa
    1
    q
    qa
    1
    ab
    a
    
    예상 출력
    0.3000
    2.2500
    1.2600
    1.0100
    TOSS
    1.0000
    
  3. 예제 3

    입력
    4
    3
    abcdef
    abc
    2
    abcdef
    abc
    0
    abc
    abc
    0
    abc
    abd
    
    예상 출력
    3.0000
    TOSS
    0.0000
    TOSS