이상적인 대회

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

요약
ASCII로 된 대회 순위표를 파싱해서 vainness, oversimplification, evenness, unsolvability, 문제별 instability 같은 가중 페널티들을 계산하고 최종 negidealness 값을 구하는 문제입니다.
난이도

보통10점 중 6점

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

문제

지역 및 하위 지역 프로그래밍 대회 자체의 순위를 매기는 상위 대회는 없습니다. 대회 전체를 서로 비교하기가 어렵기 때문입니다. 여기 한 가지 방법이 있습니다. 어떤 대회의 결과표가 "이상적인" 대회에서 얼마나 벗어났는지를 비이상도(negidealness) 라는 값으로 측정합니다. 이는 아래 벌점들의 가중합입니다. 이하에서 TT는 참가 팀 수, PP는 문제 수를 나타냅니다.

헛됨 VV. 모든 팀은 적어도 한 문제를 풀어야 합니다. 한 문제도 풀지 못한 팀마다 1/T1/T을 더합니다.

지나친 쉬움 OO. 모든 문제를 다 푼 팀이 있어서는 안 됩니다. PP개 문제를 모두 푼 팀마다 1/T1/T을 더합니다.

고름 EE. 푼 문제 수는 순위를 따라 내려가면서 완만하게 줄어들어야 합니다. 팀은 순위 순서로 나열되어 있습니다. 순위상 인접한 두 팀의 푼 문제 수 차이가 d>1d > 1이면 (d−1)/P(d-1)/P을 더합니다. 즉 두 팀 사이에서 건너뛴 "푼 문제 수" 값 하나마다 1/P1/P입니다. 예를 들어 한 팀이 5문제를 풀고 다음 팀이 1문제를 풀었다면 2, 3, 4가 건너뛰어졌으므로 3/P3/P을 더합니다.

풀 수 없음 UU. 모든 문제는 적어도 한 팀이 풀어야 합니다. 아무 팀도 풀지 못한 문제마다 1/P1/P을 더합니다.

불안정 I1,I2,…,IPI_1, I_2, \dots, I_P. 어떤 팀이 문제 pp를 풀었다면, 그보다 위에 있는 모든 팀도 pp를 풀어야 합니다. 문제 pp에 대해 pp를 푼 팀 중 가장 순위가 낮은 팀을 잡습니다. 그 팀보다 순위가 엄격하게 위인(순위 번호가 더 작은) 팀 중 pp를 풀지 못한 팀마다 IpI_p에 1/T1/T을 더합니다. 아무 팀도 pp를 풀지 못했다면 Ip=0I_p = 0입니다.

전체 비이상도는 다음과 같습니다. N=1.03 V+3.141 O+2.171 E+1.414 U+I1+I2+⋯+IPP.N = 1.03\,V + 3.141\,O + 2.171\,E + 1.414\,U + \frac{I_1 + I_2 + \dots + I_P}{P}.

주어진 결과표에 대해 모든 벌점과 전체 비이상도를 계산하는 프로그램을 작성하세요.

입력

입력은 순수 ASCII로 된 대회 결과표입니다. 공백 문자는 스페이스뿐이며, 열은 최소 한 칸의 공백으로 구분됩니다.

  • 표는 0줄 이상의 임의의 머리글 줄로 시작하고, 이어서 열 제목 줄, 그다음 하이픈(-)만으로 이루어진 구분선이 옵니다.
  • 열 제목 줄에는 Team, 이어서 문제 글자들(대문자 A, B, … 를 알파벳 순서로), 그리고 =, Time, R이 있습니다.
  • 구분선 다음의 각 줄은 한 팀을 순위 순서로 나타냅니다. 한 줄에는 팀 이름(공백을 포함할 수 있음), 이어서 문제마다 하나씩의 칸, 그리고 세 정수 — 그 팀이 푼 문제 수, 벌점 시간, 순위 R — 가 있습니다.
  • 문제 칸은 그 팀이 문제를 풀었으면 + 또는 +k(kk는 정답 이전의 오답 횟수), 오답만 냈으면 -k, 시도하지 않았으면 . 입니다. 칸이 +로 시작할 때에 한해 그 팀이 문제를 푼 것으로 봅니다.
  • 순위 번호는 같을 수 있습니다(동점). 한 팀이 다른 팀보다 위에 있다는 것은 순위 번호가 엄격하게 더 작을 때에만 성립합니다.

문제는 최대 26개, 팀은 최대 300개입니다.

출력

다음을 각각 한 줄씩 출력합니다.

  • Vainness = 다음에 VV,
  • Oversimplification = 다음에 OO,
  • Evenness = 다음에 EE,
  • Unsolvability = 다음에 UU,
  • Instability p = 다음에 IpI_p (p=1,2,…,Pp = 1, 2, \dots, P),
  • Negidealness = 다음에 NN.

모든 값은 소수점 아래 정확히 세 자리로 반올림하여 출력합니다. 어떤 값도 반올림 경계에 놓이지 않도록 테스트 데이터가 구성되어 있으므로, 세 자리로 올바르게 반올림하면 모두 동일한 문자열이 나옵니다.

예제3

  1. 예제 1

    입력
       The contest header may contain
          arbitrary number of lines
    Team          A  B C  D  E   = Time R
    -------------------------------------
    Revda STU     + +  +2 +1 -9  4 9274 1
    Girvas NU #1  +  + -1 .  -11 2 321  2
    Kargopol SU   + -3 +  .  -4  2 321  2
    Utorgosh SU   . .  .  +  -5  1 122  4
    Dubrovno SU   . +  -1 .   -4 1 123  5
    Girvas NU - 2 . .  .  -5 -99 0 0    6
    
    예상 출력
    Vainness = 0.167
    Oversimplification = 0.000
    Evenness = 0.200
    Unsolvability = 0.200
    Instability 1 = 0.000
    Instability 2 = 0.333
    Instability 3 = 0.000
    Instability 4 = 0.333
    Instability 5 = 0.000
    Negidealness = 1.022
    
  2. 예제 2

    입력
    Regional Warmup Round
    Team       A B C = Time R
    -------------------------
    Alpha      + + + 3 100 1
    Bravo      + + + 3 150 2
    Charlie    + + + 3 200 3
    
    예상 출력
    Vainness = 0.000
    Oversimplification = 1.000
    Evenness = 0.000
    Unsolvability = 0.000
    Instability 1 = 0.000
    Instability 2 = 0.000
    Instability 3 = 0.000
    Negidealness = 3.141
    
  3. 예제 3

    입력
    City Qualifier
       two header lines here
    Team        A  B  C  = Time R
    -----------------------------
    Falcon Team + +  .   2 45  1
    Owl Squad   + -1 -2  1 80  2
    Newbie One  . .  .   0 0   3
    
    예상 출력
    Vainness = 0.333
    Oversimplification = 0.000
    Evenness = 0.000
    Unsolvability = 0.333
    Instability 1 = 0.000
    Instability 2 = 0.000
    Instability 3 = 0.000
    Negidealness = 0.815