Wire-compatible Protocol buffer
시간 제한3초메모리 제한256 MB
프로토콜 버퍼 디스크립터를 파싱한 뒤 두 메시지 타입이 필드 번호와 타입, 라벨을 기준으로 와이어 포맷 호환인지 판정한다.
문제
Protocol buffers(줄여서 protobuf)는 구조화된 데이터를 직렬화하기 위한 유연하고 효율적이며 자동화된 메커니즘이다. XML을 떠올리면 되는데, 더 작고 빠르고 단순하다. 이 문제에서는 단순화된 protocol buffer에서의 wire-compatible 문제를 다룬다.
입력
첫 번째 줄에는 protobuf descriptor의 줄 수를 나타내는 정수 이 주어진다.
다음 개의 줄은 메시지들의 집합을 담고 있는 protobuf descriptor의 내용이다. 각 줄은 120자를 넘지 않는다.
그 다음 줄에는 정수 ()이 주어지며, 이는 개의 wire-format 호환성 질의가 있음을 나타낸다.
그 다음 개의 줄이 주어지며, 각 줄은 두 메시지 이름으로 이루어진 wire-format 호환성 질의이다.
descriptor는 유효함이 보장된다. 즉, 두 메시지가 같은 이름을 가지지 않고, 한 메시지의 두 필드가 같은 필드 이름이나 태그 번호를 가지지 않으며, 필드에 있는 각 메시지 타입은 반드시 존재하는 메시지 이름 중 하나이다.
descriptor에는 메시지가 최대 1000개 있고, 각 메시지는 최대 16개의 필드를 가진다.
입력의 모든 토큰은 공백으로 구분된다.
출력
각 질의에 대해, 질의에 있는 두 메시지가 wire-format compatible이면 "Wire-format compatible."을, 그렇지 않으면 "Wire-format incompatible."을 한 줄에 출력한다. (따옴표는 명확성을 위해 표기한 것이다.)
힌트
첫 번째 예제에서:
- Test1과 Test2는 두 메시지의 필드 이름이 다르지만, 직렬화된 메시지는 필드 번호만을 고려한다.
- Test1과 Test3은 두 메시지가 같은 필드 이름을 가지지만, 필드 번호가 일치하지 않는다.
- Test1과 Test4는 required와 optional이 호환되지 않음이 자명하다.
- Test1과 Test5는 모든 유효한 UTF-8 문자열이 유효한 메시지인 것은 아니며, 그 반대도 마찬가지이다.