위험도 평가

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

요약
문장의 수식어를 품질 단어에 적용하고 각 단어를 가장 최근 회사 이름에 귀속시켜 회사별 점수를 계산한다.
난이도

보통10점 중 4점

유형
문자열, 시뮬레이션, 해시맵
정답자
아직 제출이 없습니다

문제

투자자가 어느 회사에 돈을 넣을지(예: 주식 매수) 정보에 근거해 판단하는 한 가지 방법은 독립적인 평가 보고서를 읽는 것이다. 여러 서비스가 이런 보고서를 작성하고 종목에 등급을 매긴다. 금융이 한창 과열되던 시절에는, 뚜렷한 사업 모델이 없는 회사조차도 대부분 건전한 투자처로 평가받았다고 한다. "고수익 유망주" 같은 한 문장이면 충분했고, 투자자들은 나그네쥐 떼처럼 그 뒤를 따랐다. 사실 컴퓨터 프로그램도 이 정도는 할 수 있을 것이다. 그리고 이제 당신이 바로 그 프로그램을 작성하게 된다.

프로그램은 회사 하나 이상에 대한 텍스트를 입력으로 받는다. 어떤 품질 단어들은 긍정적이거나 부정적인 어감을 가진다. 예를 들어 "trouble"은 부정적이고 "promising"은 긍정적이다. 이런 단어마다 기본 품질 점수가 주어진다.

문장에는 수식어 "not", "very", "extremely", "slightly"가 들어갈 수도 있다.

  • 한 문장 안에 "not"이 한 번이라도 나타나면, 그 문장에 있는 모든 품질 단어의 값이 00이 된다.
  • "very"는 그 문장에 있는 각 품질 단어의 값을 두 배로 만든다.
  • "extremely"는 각 품질 단어의 값을 세 배로 만든다.
  • "slightly"는 각 품질 단어의 값을 절반으로 만든다.

이 배수들은 곱셈으로 누적된다. 예를 들어 문장 "AIG very trouble extremely very."는("trouble"의 점수가 −1-1이라고 할 때) "AIG"에 −12-12점을 준다. −1×2×3×2=−12-1 \times 2 \times 3 \times 2 = -12이기 때문이다. 수식어는 한 문장 안에서만 적용되며, 문장은 '.'로 끝난다(텍스트에는 ',', ';', ':' 등 다른 문장 부호가 없다).

하나의 텍스트가 여러 회사를 다룰 수 있다. 어떤 품질 단어가 어느 회사에 속하는지는 다음과 같이 정한다. 텍스트에서 한 회사 이름이 등장한 지점부터 다음 회사 이름이 등장하기 전까지(또는 텍스트 끝까지)의 모든 단어는 그 회사를 가리키는 것으로 본다. 첫 회사 이름보다 앞선 단어들은 어느 회사도 가리키지 않는다. 여러 회사가 같은 문장에 나올 수도 있다. 예를 들어 "AIG trouble Pixar promising very."는("trouble" =−1= -1, "promising" =+1= +1일 때) "AIG"에 −2-2점, "Pixar"에 +2+2점을 준다. "very"가 두 품질 단어 모두에 적용되기 때문이다(둘 다 같은 문장에 있다).

한 회사가 여러 문장(또는 여러 텍스트 덩어리)에 걸쳐 등장하면, 각 문장에서 얻은 점수를 모두 더한다.

입력

첫 줄에는 데이터 집합의 개수 KK가 주어진다. 이어서 KK개의 데이터 집합이 아래 형식으로 주어진다.

각 데이터 집합의 첫 줄에는 세 정수 CC, QQ, LL이 주어진다. 1≤C≤1001 \le C \le 100은 회사의 수, 1≤Q≤1001 \le Q \le 100은 품질 단어의 수, 1≤L≤10001 \le L \le 1000은 텍스트의 줄 수이다. 이어서 CC개의 줄에 각각 회사 이름(글자, 하이픈 포함 가능)이 주어진다. 그다음 QQ개의 줄이 오는데, 각 줄에는 품질 단어 wiw_i(역시 하이픈 포함 가능), 공백 한 칸, 그리고 실수 qiq_i(단어 ii의 기본 품질 점수)가 순서대로 주어진다.

마지막으로 LL개의 텍스트 줄이 주어진다. 각 줄은 최대 8080자이다. 모든 문자는 대문자 또는 소문자, 하이픈(단어의 일부), '.', 또는 공백이다. 회사 이름은 대소문자가 정확히 일치할 때만 매칭된다 — "AIG"는 "aig"와 매칭되지 않는다. 품질 단어와 수식어는 대소문자와 무관하게 매칭된다 — "trouble"은 "tRoubLE"와, "Very"는 "veRY"와 매칭된다. 입력에서 서로 같은 품질 단어는 없으며, 어떤 회사 이름도 다른 회사 이름이나 품질 단어와 같지 않음이 보장된다.

출력

각 데이터 집합에 대해, 먼저 "Data Set x:"를 한 줄에 출력한다(x는 데이터 집합 번호). 그다음 CC개 회사의 품질 점수를 소수점 아래 둘째 자리까지 반올림하여, 입력에서 회사 이름이 주어진 순서대로 한 줄에 하나씩 출력한다. 연속한 데이터 집합 사이는 빈 줄 하나로 구분한다.

예제2

  1. 예제 1

    입력
    1
    4 5 7
    AIG
    Pixar
    Wells-Fargo
    Microsoft
    risky -0.5
    promising 1
    bad -1.5
    blue-chip 1.5
    trouble -1
    In these risky economic times make good
    investments. Not bad ones. Microsoft is still very blue-chip stock but
    AIG looks risky. Pixar is not bad up-and-coming. Could even be
    slightly promising. Not very risky. Not blue-chip
    though. wells-fargo is extremely bad.
    Considering MICROSOFT more it is promising.
    Wells-Fargo is not blue-chip in fact extremely risky. Bad. Very very bad.
    
    예상 출력
    Data Set 1:
    -1.00
    -3.00
    -7.50
    3.00
    
  2. 예제 2

    입력
    2
    2 2 1
    Apple
    Google
    good 2
    bad -1
    Apple good. Google bad very. Apple bad not.
    1 1 1
    Tesla
    hot 3
    Tesla hot extremely.
    
    예상 출력
    Data Set 1:
    2.00
    -2.00
    
    Data Set 2:
    9.00