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

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

차익 거래

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

요약
통화와 환율이 주어질 때, 어떤 통화를 한 단위 바꾸는 순환 거래로 그 통화를 1단위 초과로 만들 수 있는지 판정한다.
난이도

보통10점 중 6점

유형
최단 경로, 그래프, 동적 계획법, 수학
정답자
아직 제출이 없습니다

문제

차익 거래(arbitrage)는 환율의 차이를 이용해 한 통화의 1단위를 같은 통화의 1단위보다 많은 양으로 바꾸는 것을 말한다. 예를 들어 1 미국 달러로 0.5 영국 파운드를 살 수 있고, 1 영국 파운드로 10.0 프랑스 프랑을 살 수 있으며, 1 프랑스 프랑으로 0.21 미국 달러를 살 수 있다고 하자. 그러면 영리한 트레이더는 1 미국 달러로 시작해 통화를 차례로 교환하여 0.5×10.0×0.21=1.050.5 \times 10.0 \times 0.21 = 1.05 미국 달러를 얻을 수 있고, 5 퍼센트의 이익을 남긴다.

통화 환율의 목록을 입력받아 이러한 차익 거래가 가능한지 판별하는 프로그램을 작성하라.

입력

입력은 하나 이상의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 서로 다른 통화의 수를 나타내는 정수 nn (1≤n≤301 \le n \le 30)이 주어진다. 이어지는 nn개의 줄에는 각각 통화의 이름이 하나씩 주어지며, 이름에는 공백이 포함되지 않는다. 그 다음 줄에는 뒤따르는 환율 표의 길이를 나타내는 정수 mm이 주어진다. 이어지는 mm개의 줄에는 각각 출발 통화의 이름 cic_i, cic_i에서 cjc_j로의 환율을 나타내는 실수 rijr_{ij}, 도착 통화의 이름 cjc_j가 주어진다. 표에 나타나지 않는 교환은 불가능하다.

테스트 케이스는 빈 줄로 구분된다. 입력은 nn의 값이 00인 줄로 끝난다.

출력

각 테스트 케이스마다 한 줄을 출력한다. 차익 거래가 가능하면 "Case cc: Yes", 불가능하면 "Case cc: No" 형식으로 출력하며, 여기서 cc는 1부터 시작하는 테스트 케이스 번호이다.

예제3

  1. 예제 1

    입력
    3
    USDollar
    BritishPound
    FrenchFranc
    3
    USDollar 0.5 BritishPound
    BritishPound 10.0 FrenchFranc
    FrenchFranc 0.21 USDollar
    
    3
    USDollar
    BritishPound
    FrenchFranc
    6
    USDollar 0.5 BritishPound
    USDollar 4.9 FrenchFranc
    BritishPound 10.0 FrenchFranc
    BritishPound 1.99 USDollar
    FrenchFranc 0.09 BritishPound
    FrenchFranc 0.19 USDollar
    
    0
    
    예상 출력
    Case 1: Yes
    Case 2: No
    
  2. 예제 2

    입력
    2
    Alpha
    Beta
    2
    Alpha 2.0 Beta
    Beta 0.6 Alpha
    
    0
    
    예상 출력
    Case 1: Yes
    
  3. 예제 3

    입력
    2
    Dollar
    Euro
    2
    Dollar 2.0 Euro
    Euro 0.4 Dollar
    
    0
    
    예상 출력
    Case 1: No