트레이드 AI 만들기

시간 제한2.8초메모리 제한329 MB

요약
도시 소유 현황과 현금, 담보, 트레이드 제안을 읽고 트레이드 전후 양쪽 재산 가치를 계산해 AI의 수락 여부를 판정한다.
난이도

쉬움10점 중 3점

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

문제

루미는 오랜만에 친구들을 만나 모노폴리 게임을 하기로 했다. 하지만 정작 루미는 모노폴리 게임에서 트레이드를 잘하지 못한다. 계속 지게 되어 분한 루미는 이를 갈고 트레이드 AI를 만들기로 마음 먹었다. 하지만 루미는 AI에 대한 지식이 얕은 편이어서 이번엔 간단한 수준의 트레이드 AI를 개발하기로 했다.

루미의 모노폴리 게임은 1010개의 색상으로 칠해진 여러 도시로 이루어진 맵에서 진행된다. 각 도시는 하나의 색상으로 칠해져 있으며 같은 색상의 도시는 44개 존재한다. 각 플레이어는 도시를 구매하거나 자신이 소유한 도시를 담보로 은행에서 대출을 받거나 도시와 현금을 다른 플레이어와 트레이드할 수 있다.

트레이드는 아래와 같은 순서로 진행된다.

  1. 트레이드에 참여하는 두 플레이어는 각각 자신이 지불할 현금과 상대로부터 받아올 도시를 제시한다.
  2. 두 플레이어가 제시된 조건을 보고 트레이드를 진행하기 원하면 각자 자신이 제시한 현금을 상대에게 넘겨주고 자신이 제시한 도시를 넘겨받는다.

이때,

  1. 각 플레이어는 자신이 소유하지 않은 도시를 담보 대출의 담보물로 설정할 수 없다.
  2. 각 플레이어는 자신이 소유하고 있는 현금보다 많은 현금을 제시하지 못하며, 상대가 소유하고 있지 않은 도시를 제시할 수 없다.
  3. 트레이드 이후에도 담보 대출의 담보물이 된 도시는 담보 상태가 유지된다. 즉, 자신이 담보 대출의 담보물로 설정한 도시를 상대에게 트레이드로 넘기면 상대가 담보 대출 페널티를 지게 된다.

루미의 트레이드 AI는 아래와 같은 방식으로 재산 가치를 계산한다.

  1. 재산 가치 계산: 플레이어가 소유한 도시의 가치를 색상별로 계산해 재산 가치에 더한다. 어떤 도시도 소유하지 않은 색상의 가치는 00이다.
  2. 현금 가치 계산: 플레이어가 보유하고 있는 현금의 AA%를 재산 가치에 더한다. 계산 결과가 정수가 아니라면 소수점 아래는 버린다.
  3. 담보 대출 페널티 계산: 플레이어가 가지고 있는 도시 중 담보 대출의 담보로 설정된 도시마다 BB의 페널티를 재산 가치에서 차감한다.

루미의 트레이드 AI는 (트레이드 후 자신의 재산 가치 - 트레이드 후 상대의 재산 가치)가 (트레이드 전 자신의 재산 가치 - 트레이드 전 상대의 재산 가치)보다 크거나 같다면 유리한 트레이드라고 판단하여 트레이드를 수락한다. 모노폴리 게임의 트레이드 상황이 주어지면 루미의 트레이드 AI가 트레이드를 수락할지 예측해 보자.

입력

입력은 총 1919줄로 구성된다.

첫 번째 줄부터 1010개의 줄에 걸쳐 색상별로 도시의 가치를 계산하는데 필요한 정보가 주어진다. ii번째 줄에서는 w_i,1,⋯ ,w_i,4w\_{i,1},\cdots ,w\_{i,4}가 공백으로 구분되어 주어진다. w_i,jw\_{i, j}는 색상이 ii인 도시를 jj개 소유했을 때의 가치를 나타낸다.

1111번째 줄에서는 트레이드 전 자신과 상대가 소유한 도시 현황이 삼진 문자열 형태로 주어진다.

1212번째 줄에서는 트레이드 전 자신과 상대가 트레이드로 제시한 도시 현황이 삼진 문자열 형태로 주어진다.

1111번째 줄부터 22개의 줄에 걸쳐 주어지는 문자열은 다음과 같은 형식을 따른다.

  • 길이는 4040자이다.
  • 1111번째 줄에서 4(i−1)+j4(i-1)+j번째 자릿수는 색상이 ii인 도시 중 jj번째 도시를 소유한 플레이어를 나타낸다. 자신이 소유한 경우에는 11, 상대가 소유한 경우에는 22, 둘 중 누구의 소유도 아닌 경우 00이다.
  • 1212번째 줄에서 4(i−1)+j4(i-1)+j번째 자릿수는 색상이 ii인 도시 중 jj번째 도시를 트레이드에서 제시한 플레이어를 나타낸다. 자신이 트레이드에서 제시한 상대의 도시인 경우에는 11, 상대가 트레이드에서 제시한 자신의 도시인 경우에는 22, 둘 중 누구도 트레이드에서 제시하지 않은 경우 00이다.

1313번째 줄에서는 트레이드 전 자신과 상대가 소유한 도시 중 담보 대출의 담보물로 설정된 도시 현황이 이진 문자열 형태로 주어진다.

1313번째 줄에 주어지는 문자열은 다음과 같은 형식을 따른다.

  • 길이는 4040자이다.
  • 4(i−1)+j4(i-1) +j번째 자릿수는 색상이 ii인 도시 중 jj번째 도시가 담보 대출의 담보물로 설정된 도시인지 나타낸다. 담보 대출의 담보물로 설정된 도시라면 11, 아니라면 00이다.

1414번째 줄과 1515번째 줄에서는 트레이드 전 자신과 상대가 보유하고 있는 현금이 한 줄에 하나씩 차례대로 주어진다.

1616번째 줄과 1717번째 줄에서는 이번 트레이드에서 자신과 상대가 제시한 현금이 한 줄에 하나씩 차례대로 주어진다.

1818번째 줄에는 트레이드 AI가 계산에서 사용하는 현금 가치의 가중치 AA가 주어진다.

1919번째 줄에는 트레이드 AI가 계산에서 사용하는 담보 대출 페널티 BB가 주어진다.

출력

루미의 트레이드 AI가 트레이드를 수락한다면 YES, 수락하지 않는다면 NO를 출력한다.

제한

  • 0≤w_i,1,⋯ ,w_i,4≤2550\leq w\_{i,1},\cdots ,w\_{i,4}\leq 255
  • 트레이드 전 자신과 상대가 보유하고 있는 현금, 이번 트레이드에서 제시한 현금은 모두 00 이상 10,00010\\, 000 이하이다.
  • 0≤A≤1000 \leq A \leq 100
  • 0≤B≤2550 \leq B \leq 255
  • 입력으로 주어지는 수는 모두 정수이다.

예제3

  1. 예제 1

    입력
    3 156 156 156
    8 17 227 227
    17 35 198 198
    18 36 171 171
    11 23 197 197
    17 38 255 255
    16 32 192 192
    26 193 193 193
    12 40 112 180
    10 65 65 65
    1200000000000000000000000000000000000000
    2100000000000000000000000000000000000000
    0000000000000000000000000000000000000000
    10000
    10000
    0
    0
    5
    5
    
    예상 출력
    YES
    
  2. 예제 2

    입력
    3 156 156 156
    8 17 227 227
    17 35 198 198
    18 36 171 171
    11 23 197 197
    17 38 255 255
    16 32 192 192
    26 193 193 193
    12 40 112 180
    10 65 65 65
    0000111000000000000000000000000000000000
    0000222000000000000000000000000000000000
    0000111000000000000000000000000000000000
    1300
    1500
    0
    1500
    5
    5
    
    예상 출력
    NO
    
  3. 예제 3

    입력
    255 255 255 255
    10 234 234 234
    12 235 235 235
    20 40 217 217
    21 41 218 218
    22 42 219 219
    35 70 135 225
    36 71 136 226
    37 72 137 227
    38 73 138 228
    1000120011001120122022201112112212222222
    2000210020002000200011102000220001001111
    1000010001001000100010000010001010011100
    10000
    10000
    2000
    4000
    10
    14
    
    예상 출력
    YES