만드는 중입니다

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

공정성 관리

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

요약
두 BALLOON 프로그램이 모든 리스트를 같은 확률로 반환하는지 판별합니다. 프로그램은 리스트 리터럴과 concat, shuffle, sorted로 이루어집니다.
난이도

보통10점 중 7점

유형
문자열, 재귀, 구현
정답자
아직 제출이 없습니다

문제

프로그래밍 대회에서 가장 중요한 역할 중 하나는 최고 공정 책임자(CEO, Chief Equality Officer)이다. 이 사람은 모든 팀이 우승할 기회를 똑같이 갖도록 관리한다. 작년 NWERC 이후 현재 CEO인 Gregor는 대회를 더 공정하게 만들 방법을 오래 고민했다.

그의 답은 제출에 쓸 수 있는 유일한 언어로 새 프로그래밍 언어를 도입하는 것이었다. 허용된 언어 중 하나에 익숙하지 않아서 불리해지는 팀은 없다. 이 언어의 이름은 BALLOON이며, Building A Long List Of Ordinary Numbers의 줄임말이다. 자료형은 정수 리스트 하나뿐이다. 언어를 빠르게 유지하려고 명령어는 네 개만 있다.

  • [x1,...,xn]은 리스트를 만드는 생성자다. 대괄호 안의 정수를 주어진 순서대로 담아 반환한다.
  • concat(<Expr1>,<Expr2>)는 <Expr1>을 계산해 나온 정수를 먼저 놓고, 그 뒤에 <Expr2>를 계산해 나온 정수를 붙여 반환한다.
  • shuffle(<Expr>)는 <Expr>이 반환한 정수를 균등하게 무작위로 고른 순열로 재배열해 반환한다. 각 순열이 같은 확률로 쓰인다.
  • sorted(<Expr>)는 <Expr>이 반환한 정수를 비내림차순으로 재배열해 반환한다.

예를 들어 concat(shuffle([1,2]),shuffle([1,2]))를 보자. 각 shuffle은 [1,2]를 받아 확률 0.50.5로 [1,2] 또는 [2,1]을 반환하며, 두 결과는 서로 독립이다. 바깥의 concat이 두 결과를 이어 붙이므로 [1,2,1,2], [1,2,2,1], [2,1,1,2], [2,1,2,1] 중 하나가 각각 확률 0.250.25로 나온다.

BALLOON의 출력은 확률적이므로 제출물을 바이트 단위로 비교해 채점할 수 없다. 심사 서버는 제출 프로그램이 심사위원의 기준 풀이와 동등한지 확인한다. 두 프로그램은 임의의 정수 리스트 LL에 대해 둘 다 LL을 반환할 확률이 같을 때 동등하다.

당신의 과제는 주어진 두 BALLOON 프로그램이 동등한지 판단하는 것이다.

입력

입력은 다음과 같다.

  • 첫 번째 프로그램 A를 담은 한 줄의 문자열.
  • 두 번째 프로그램 B를 담은 한 줄의 문자열.

각 프로그램의 길이는 3자 이상 10610^6자 이하이다. 프로그램에는 공백과 빈 리스트가 없으므로, 입력에 공백이나 []가 나타나지 않는다. 프로그램에 나오는 각 정수는 0보다 크고 10910^9보다 작다.

출력

두 프로그램이 동등하면 equal을, 그렇지 않으면 not equal을 출력한다.

예제3

  1. 예제 1

    입력
    concat(shuffle([1,2]),shuffle([1,2]))
    shuffle([1,2,1,2])
    
    예상 출력
    not equal
    
  2. 예제 2

    입력
    sorted(concat([3,2,1],[4,5,6]))
    [1,2,3,4,5,6]
    
    예상 출력
    equal
    
  3. 예제 3

    입력
    concat(sorted([4,3,2,1]),shuffle([1]))
    concat(concat([1,2,3],shuffle([4])),sorted([1]))
    
    예상 출력
    equal