만드는 중입니다

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

My Bad

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

요약
작은 비순환 논리 회로와 입출력 관측값이 주어질 때, 회로가 정상인지 판별하고 고장 난 게이트와 고장 방식을 찾아낸다.
난이도

보통10점 중 5점

유형
시뮬레이션, 완전 탐색, 구현, 비트 연산
정답자
아직 제출이 없습니다

문제

논리 회로는 여러 게이트를 거쳐 입력을 출력으로 변환하며, 회로에는 피드백 루프가 없다. 입력과 출력은 순서가 있는 논리값의 집합이고, 여기서는 1과 0으로 나타낸다. 이 문제에서 다루는 회로는 and 게이트(두 입력이 모두 1일 때만 1을 출력), or 게이트(두 입력 중 하나 이상이 1이면 1을 출력), exclusive or(xor) 게이트(두 입력 중 정확히 하나만 1일 때 1을 출력), not 게이트(하나뿐인 입력의 여집합을 출력)로 구성된다. 아래 그림은 두 회로를 보여 준다.

그림 1: 게이트가 2개인 회로그림 2: 게이트가 4개인 회로

아쉽게도 실제 게이트는 때때로 고장 난다. 고장은 여러 방식으로 일어날 수 있지만, 이 문제에서는 게이트가 다음 세 가지 중 하나로 고장 나는 경우만 다룬다. 1) 올바른 출력을 항상 반전한다, 2) 항상 0을 출력한다, 3) 항상 1을 출력한다. 이 문제의 회로에서는 기껏해야 게이트 하나만 고장 난다.

회로와, 그 회로의 입력 및 출력에 대한 여러 관측값이 주어졌을 때 회로가 올바르게 동작하는지 고장 났는지 판별하는 프로그램을 작성해야 한다. 입력값 중 적어도 하나가 잘못된 출력을 낸다면, 고장 난 게이트 하나와 그 고장 방식을 알아내야 한다. 항상 알아낼 수 있는 것은 아니다.

입력

입력은 여러 테스트 케이스로 이루어지며, 각 테스트 케이스는 회로와 그 입력 및 출력 설명을 담는다. 각 테스트 케이스는 다음 부분을 순서대로 가진다.

  1. 회로의 입력 수(N ≤ 8), 게이트 수(G ≤ 19), 출력 수(U ≤ 19)를 나타내는 양의 정수 세 개가 있는 한 줄.
  2. 게이트마다 한 줄씩 주어지는 입력. 첫 줄은 게이트 g1을 설명한다. 게이트가 여러 개라면 다음 줄은 게이트 g2를 설명하고, 이런 식으로 이어진다. 각 줄에는 게이트 종류(a = and, n = not, o = or, x = exclusive or)와 게이트의 입력이 무엇인지가 들어 있다. 게이트 입력은 회로 입력(i1, i2, …)이나 다른 게이트의 출력(g1, g2, …)에서 온다.
  3. U개의 출력 u1, u2, …에 연결된 게이트 번호가 있는 한 줄. 예를 들어 출력이 세 개이고 u1이 g5에서, u2가 g1에서, u3가 g4에서 온다면 이 줄은 5 1 4가 된다.
  4. 회로 동작의 관측 횟수(B)를 나타내는 정수가 있는 한 줄.
  5. 마지막으로 B개의 줄. 각 줄에는 관측된 입력값 N개(1과 0)와 그에 대응하는 관측된 출력값 U개가 들어 있다. 두 관측의 입력값이 같은 경우는 없다.

입력의 어느 줄에서든 연속한 값들은 공백 하나로 구분된다. 입력은 0 세 개가 있는 줄로 끝난다.

출력

입력에 있는 각 회로마다 케이스 번호(1부터 시작)를 출력하고, 그 뒤에 콜론과 공백을 출력한 다음 회로 분석 결과를 출력한다. 분석 결과는 다음 중 하나이며 # 자리에는 알맞은 게이트 번호가 들어간다.

No faults detected
Gate # is failing; output inverted
Gate # is failing; output stuck at 0
Gate # is failing; output stuck at 1
Unable to totally classify the failure

그림 1과 그림 2의 회로는 첫 번째와 마지막 샘플 테스트 케이스에 사용된다.

예제1

  1. 예제 1

    입력
    2 2 1
    o i1 i2
    n g1
    2
    2
    1 0 0
    0 0 1
    2 1 1
    a i1 i2
    1
    1
    1 0 1
    2 1 1
    a i1 i2
    1
    2
    1 0 1
    1 1 1
    1 1 1
    n i1
    1
    2
    1 1
    0 0
    3 4 4
    n g4
    a i1 i2
    o i2 i3
    x i3 i1
    2 3 4 1
    4
    0 1 0 0 1 0 1
    0 1 1 0 1 1 0
    1 1 1 0 1 0 1
    0 0 0 0 0 0 1
    0 0 0
    
    예상 출력
    Case 1: No faults detected
    Case 2: Unable to totally classify the failure
    Case 3: Gate 1 is failing; output stuck at 1
    Case 4: Gate 1 is failing; output inverted
    Case 5: Gate 2 is failing; output stuck at 0