#P3470. [POI 2008] BBB-BBB

[POI 2008] BBB-BBB

题目描述

Byteasar 在 Byteotian Bit Bank(简称 BBB)有一个账户。

一开始账户里有 pp 个 bythaler,最后有 qq 个 bythaler。每笔交易要么是存入一个 bythaler,要么是取出一个 bythaler。账户余额从未为负。

一位银行柜员准备了一份银行对账单:一条纸带,上面有一系列的加号和减号(加号表示存入一个 bythaler,减号表示取出一个 bythaler)。

很快发现,有些交易记录不正确。银行柜员不能打印另一份对账单,但必须修改已经打印的那一份。对账单不必与事实一致,只要交易序列满足以下两个条件即可:

最终余额与初始余额和对账单中的交易序列一致,根据对账单中的交易序列,账户余额从未为负。

你需要计算银行柜员需要多少最少时间来修正对账单。 银行柜员可以:

  • xx 秒内将任意选择的交易变为其相反的交易,或者
  • yy 秒内将最后一笔交易移到对账单的开头。例如,如果 p=2,q=3p=2,q=3,那么 --++-+-++-+-+ 是一个正确的对账单。

另一方面,对账单 ---++++++ 是不正确的,因为账户余额在第三笔交易后会变为负数,而且最终余额应该是 3,而不是 5。

然而,可以通过将倒数第二个符号变为其相反的符号,并将最后一笔交易移到对账单的开头来修正。

任务

编写一个程序:

  • 从标准输入中读取 Byteasar 账户的当前对账单(一个加号和减号的序列)以及数字 p,q,xp,q,xyy
  • 输出修正对账单所需的最少秒数,使得初始和最终余额一致,并且余额从未为负。

输入格式

第一行包含 55 个整数 n,p,q,xn,p,q,xy (1n1 000 000y\ (1\le n\le 1\ 000\ 000, 0p,q1 000 0000\le p,q\le 1\ 000\ 000, 1x,y10001\le x,y\le 1000),用单个空格分隔,分别表示:Byteasar 进行的交易数量、初始和最终账户余额、执行一次符号变更和将交易移到开头所需的秒数。

第二行包含一系列符号(每个是加号或减号),中间没有空格。

输出格式

输出的第一行和最后一行应包含一个整数,即修正对账单所需的最少秒数。如果不需要修正,则为零。

你可以假设每个测试数据都有一个适当的修改序列。

9 2 3 2 1
---++++++

3

提示

(由 ChatGPT 4o 翻译)