아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

비트 맞추기

면접 대비

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

요약
0, 1, ?로 이루어진 S를 0과 1로만 이루어진 T로 바꿀 때, 0을 1로 바꾸기, ?를 0이나 1로 바꾸기, 두 문자 교환 세 가지 연산을 최소 횟수로 사용하는 방법을 구한다. 불가능하면 -1을 출력한다.
난이도

보통10점 중 5점

유형
그리디, 문자열, 수학, 구현
정답자
아직 제출이 없습니다

문제

길이가 같은 두 문자열 SS와 TT가 주어진다. SS는 문자 0, 1, ?로 이루어져 있고, TT는 0과 1로만 이루어져 있다. 다음 세 가지 연산을 최소 횟수로 사용해 SS를 TT와 똑같이 만들어라.

  1. SS에 있는 0 하나를 1로 바꾼다.
  2. SS에 있는 ? 하나를 0 또는 1로 바꾼다.
  3. SS의 두 위치를 골라 두 문자를 맞바꾼다.

1을 0으로 되돌리는 연산은 없다.

예를 들어 S=S = 01??00, T=T = 001010이면 세 번의 연산으로 충분하다.

  • 처음에 S=S = 01??00
  • 첫 번째 연산으로 세 번째 문자를 1로 바꾸면 S=S = 011?00
  • 두 번째 연산으로 네 번째 문자를 0으로 바꾸면 S=S = 011000
  • 세 번째 연산으로 두 번째 문자와 다섯 번째 문자를 맞바꾸면 S=S = 001010

입력

첫째 줄에 테스트 케이스의 개수 CC가 주어진다. (1≤C≤2001 \le C \le 200)

각 테스트 케이스는 두 줄이다. 첫 줄에는 0, 1, ?로 이루어진 문자열 SS가 주어지고, 둘째 줄에는 0과 1로 이루어진 문자열 TT가 주어진다. 두 문자열의 길이는 서로 같으며 1 이상 100 이하이다.

출력

각 테스트 케이스마다 Case x: y 형식으로 한 줄씩 출력한다. xx는 1부터 시작하는 테스트 케이스 번호이고, yy는 SS를 TT로 만드는 최소 연산 횟수이다. 어떤 순서로도 SS를 TT로 만들 수 없으면 yy 자리에 -1을 출력한다.

예제4

  1. 예제 1

    입력
    3
    01??00
    001010
    01
    10
    110001
    000000
    
    예상 출력
    Case 1: 3
    Case 2: 1
    Case 3: -1
    
  2. 예제 2

    입력
    1
    1010
    1010
    
    예상 출력
    Case 1: 0
    
  3. 예제 3

    입력
    4
    0
    1
    1
    0
    ?
    0
    ?
    1
    
    예상 출력
    Case 1: 1
    Case 2: -1
    Case 3: 1
    Case 4: 1
    
  4. 예제 4

    입력
    2
    ??????
    101010
    ??????
    000000
    
    예상 출력
    Case 1: 6
    Case 2: 6