#P3470. [POI 2008] BBB-BBB

[POI 2008] BBB-BBB

Description

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。 - 输出修正对账单所需的最少秒数,使得初始和最终余额一致,并且余额从未为负。

Input Format

第一行包含 5 个整数 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 进行的交易数量、初始和最终账户余额、执行一次符号变更和将交易移到开头所需的秒数。 第二行包含一系列符号(每个是加号或减号),中间没有空格。

Output Format

输出的第一行和最后一行应包含一个整数,即修正对账单所需的最少秒数。如果不需要修正,则为零。 你可以假设每个测试数据都有一个适当的修改序列。

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

3

Hint

(由 ChatGPT 4o 翻译)