학장 지침

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

말라스트라나에 있는 수학물리학부 건물을 다시 짓는 데에는 돈이 아주 많이 든다. 인부의 작업 능률을 높이는 프로그램을 짜는 프로그래머를 먹여 살리는 값만 따져도 바게트와 코카콜라, 그리고 이 사람들의 기본적인 생명 활동을 관리하는 인력에 적잖은 돈이 나간다. 프로그래머의 효율을 감시하는 조직의 인건비는 아예 꺼내지 않는 편이 낫다. 그래서 학장은 자금 흐름을 통제하는 지침 SM2001/364을 내놓았다.

이 지침은 어느 직원이 모르타르 값을, 어느 직원이 벽돌 값을, 어느 직원이 창문 값을 집행할 권한이 있는지 정한다. 학부 지출 자료를 하나도 빠짐없이 보관하고 지키라고 엄하게 명령하며, 공급업체가 낸 견적을 적어 두는 방식과 공급업체 및 그 하청업체를 고르는 절차까지 규정한다.

학부가 회사 쉰 곳에서 견적을 받았다고 하자. 회사마다 제품을 만들 원자재가 필요하고, 그 원자재는 다른 회사가 댈 수 있다. 완성품 가격은 재료 가격에 따라 달라진다. 학부는 필요한 원자재를 가장 싸게 확보하는 방법을 찾아야 한다.

건물 공사와 별개로 학부의 일상적인 운영 자금도 관리해야 한다. 각 학과는 학부 전체 예산 말고도 연구비와 후원금을 받고, 그 돈으로 새 하드웨어와 소프트웨어를 산다. 자금 흐름을 한눈에 보이게 하려고, 학장이 임명한 위원회가 학부 공용 재무 프로그램을 만들기로 했다.

학부가 고용한 분석가에게 이 과제를 내밀자 그들은 질겁하며 풀 수 없는 문제라고 손을 들었다. 위원회는 이 부분의 구현을 일단 미루고, 최소한 학부 계좌 관리를 다루는 지침만이라도 프로그램으로 옮기기로 했다.

지침에 따르면 계좌를 다루는 모든 연산은 전용 프로그램을 거쳐야 하고, 그 프로그램이 모든 정보를 기록하고 어긋난 곳이 있으면 짚어 낸다. 이 프로그램을 만드는 것이 당신이 할 일이다.

입력

입력은 여러 줄로 이루어지고, 각 줄에 은행 연산이 하나씩 적혀 있다. 연산은 다음 일곱 가지다.

  • ZALOZ 계좌
  • ULOZ 계좌 금액
  • VYBER 계좌 금액
  • PREVED 계좌1 계좌2 금액
  • STATISTIKA
  • LIST
  • RESET

계좌는 열 자리 계좌번호이고, 앞에 붙은 0도 번호의 일부이므로 그대로 쓴다. 금액은 소수점 아래가 정확히 두 자리인 수다. 은행에는 한 순간에 계좌가 최대 10 000개 있다.

ZALOZ는 번호가 계좌인 새 계좌를 만든다.

ULOZ는 계좌 계좌금액을 입금한다.

VYBER는 계좌 계좌에서 금액을 출금한다.

PREVED금액계좌1에서 계좌2로 옮긴다.

STATISTIKALIST는 은행에 있는 계좌 정보를 출력하기만 한다.

RESET은 존재하는 계좌를 모두 없애고 시스템을 처음 상태로 되돌린다.

입력이 끝날 때까지 적힌 순서대로 처리한다.

출력

아래 메시지에서 계좌, 계좌1, 계좌2, 금액 자리에는 실제 값을 넣는다.

ZALOZUcet 계좌 vytvoren.을 출력한다. 같은 번호의 계좌가 이미 있으면 대신 Ucet 계좌 uz existuje.를 출력한다.

ULOZUlozeno 금액 na ucet 계좌.를 출력한다. 계좌가 없으면 Ucet 계좌 neexistuje.를 출력한다.

VYBERVybrano 금액 z uctu 계좌.를 출력한다. 계좌가 없으면 Ucet 계좌 neexistuje.를, 잔액이 금액보다 적으면 Nedostatek penez.를 출력하고 돈은 움직이지 않는다.

PREVED는 이체가 이루어지면 Prevedeno 금액 z uctu 계좌1 na ucet 계좌2.를 출력한다. 계좌1이 없으면 Ucet 계좌1 neexistuje.를, 계좌1은 있지만 잔액이 금액보다 적으면 Nedostatek penez.를 출력한다. 여기에 더해 계좌2가 없으면 앞 메시지 다음 줄에 Ucet 계좌2 neexistuje.를 이어서 출력하고, 이때 돈은 움직이지 않는다.

STATISTIKAPocet uctu: XXXX를 출력한다. XXXX는 은행에 있는 계좌 수이고 자리를 맞추지 않는다. 다음 줄에는 Celkem: YYYY를 출력하며, YYYY는 모든 계좌 잔액의 합이다. 합계는 정수 부분을 오른쪽 정렬해 일곱 칸에 쓰고, 이어서 소수점과 소수 두 자리를 쓴다. Celkem:과 이 일곱 칸 사이에는 공백 다섯 칸이 들어간다. 정수 부분이 일곱 자리보다 길면 줄이지 않고 그대로 늘여 쓴다.

LIST는 먼저 Pocet uctu: XXXX를 출력하고, 다음 줄부터 계좌를 한 줄에 하나씩 출력한다. 순서는 계좌를 만든 순서다. 각 줄은 계좌번호, 공백 한 칸, 그리고 합계와 같은 방식으로 쓴 잔액으로 이루어진다. 계좌를 모두 출력한 뒤 다음 줄에 Celkem: YYYY를 출력한다.

RESETReset systemu.를 출력한다.

금액은 언제나 소수점 아래 두 자리까지 쓴다. 서로 다른 연산의 출력 사이에는 빈 줄을 한 줄 넣는다. 연산을 모두 처리한 뒤에는 마지막에 Konec.을 한 줄로 출력한다.