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

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

항등식 판별기

시간 제한1초메모리 제한128 MB

요약
x와 sin, cos, tan으로 이루어진 역폴란드 표기 수식이 주어질 때, 정의되는 모든 곳에서 0인지 판정한다.
난이도

어려움10점 중 8점

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

문제

x(sin⁡2x+cos⁡2x)−x=0x(\sin^2 x + \cos^2 x) - x = 0 이라는 식은 아마 본 적이 있을 것이고, sin⁡(2x)−2sin⁡xcos⁡x=0\sin(2x) - 2\sin x\cos x = 0 역시 익숙할 것입니다. 그런데 tan⁡(2x)(x−xtan⁡2x)−2xtan⁡x=0\tan(2x)(x - x\tan^2 x) - 2x\tan x = 0 이 성립한다는 사실도 알고 있었나요? 그렇다면 sin⁡(2x)−2cos⁡x=0\sin(2x) - 2\cos x = 0 도 성립할까요? 마지막 식은 거짓입니다. 하지만 그냥 믿지만 말고, 주어진 대수식이 (정의되는 모든 곳에서) 항상 0으로 간단히 정리되는지 판별하는 프로그램을 작성하세요.

입력

입력은 여러 개의 테스트 케이스로 이루어지며, 각 테스트 케이스는 한 줄에 하나씩 주어집니다. 각 테스트 케이스는 정수 NN 으로 시작하는데, 이는 하나의 수식을 나타내는 토큰의 개수입니다. 그 뒤에 오는 NN 개의 토큰이 후위 표기법(reverse polish notation)으로 수식을 나타냅니다.

표기법은 다음과 같이 동작합니다. 처음에는 비어 있는 스택이 하나 있고, 다음 명령들이 스택의 내용을 조작합니다.

  • x 는 변수 xx 를 스택에 넣습니다.
  • sin, cos, tan 은 스택의 맨 위 원소를 각각 그 값의 sin⁡\sin, cos⁡\cos, tan⁡\tan 으로 바꿉니다.
  • +, -, * 는 스택의 맨 위 두 원소(aa 가 맨 위, 그 아래가 bb)를 각각 합 b+ab + a, 차 b−ab - a, 곱 b⋅ab \cdot a 로 바꿉니다.

입력은 항상 유효하며, 계산이 끝나면 스택에는 정확히 하나의 원소만 남고 그것이 원하는 수식이 됩니다. 한 줄의 길이는 최대 300300 글자입니다. 함수의 인자에는 함수가 들어갈 수 있어 x sin sin 도 유효하지만, 이보다 더 깊게 중첩되지는 않습니다. 입력은 N=0N = 0 인 줄로 종료됩니다.

출력

각 테스트 케이스에 대해, 수식이 항상 0이면 Identity 를, 그렇지 않으면 Not an identity 를 한 줄에 출력합니다.

예제5

  1. 예제 1

    입력
    15 x sin x sin * x cos x cos * + x * x -
    16 x sin x cos * x sin x cos * + x x + sin -
    24 x x + tan x x tan x tan * x * - * x tan x * - x tan x * -
    10 x x + sin x cos - x cos -
    0
    
    예상 출력
    Identity
    Identity
    Identity
    Not an identity
    
  2. 예제 2

    입력
    3 x x -
    0
    
    예상 출력
    Identity
    
  3. 예제 3

    입력
    2 x sin
    0
    
    예상 출력
    Not an identity
    
  4. 예제 4

    입력
    16 x x + sin x sin x cos * x sin x cos * + -
    0
    
    예상 출력
    Identity
    
  5. 예제 5

    입력
    5 x tan x sin -
    0
    
    예상 출력
    Not an identity