CodeForces - 1315B Homecoming

After a long party Petya decided to return home, but he turned out to be at the opposite end of the town from his home. There are nn crossroads in the line in the town, and there is either the bus or the tram station at each crossroad.

The crossroads are represented as a string ss of length nn, where si=Asi=A, if there is a bus station at ii-th crossroad, and si=Bsi=B, if there is a tram station at ii-th crossroad. Currently Petya is at the first crossroad (which corresponds to s1s1) and his goal is to get to the last crossroad (which corresponds to snsn).

If for two crossroads ii and jj for all crossroads i,i+1,…,j−1i,i+1,…,j−1 there is a bus station, one can pay aaroubles for the bus ticket, and go from ii-th crossroad to the jj-th crossroad by the bus (it is not necessary to have a bus station at the jj-th crossroad). Formally, paying aa roubles Petya can go from iito jj if st=Ast=A for all i≤t<ji≤t<j.

If for two crossroads ii and jj for all crossroads i,i+1,…,j−1i,i+1,…,j−1 there is a tram station, one can pay bbroubles for the tram ticket, and go from ii-th crossroad to the jj-th crossroad by the tram (it is not necessary to have a tram station at the jj-th crossroad). Formally, paying bb roubles Petya can go from iito jj if st=Bst=B for all i≤t<ji≤t<j.

For example, if ss="AABBBAB", a=4a=4 and b=3b=3 then Petya needs:

  • buy one bus ticket to get from 11 to 33,
  • buy one tram ticket to get from 33 to 66,
  • buy one bus ticket to get from 66 to 77.

Thus, in total he needs to spend 4+3+4=114+3+4=11 roubles. Please note that the type of the stop at the last crossroad (i.e. the character snsn) does not affect the final expense.

Now Petya is at the first crossroad, and he wants to get to the nn-th crossroad. After the party he has left with pp roubles. He's decided to go to some station on foot, and then go to home using only public transport.

Help him to choose the closest crossroad ii to go on foot the first, so he has enough money to get from the ii-th crossroad to the nn-th, using only tram and bus tickets.

Input

Each test contains one or more test cases. The first line contains the number of test cases tt (1≤t≤1041≤t≤104).

The first line of each test case consists of three integers a,b,pa,b,p (1≤a,b,p≤1051≤a,b,p≤105) — the cost of bus ticket, the cost of tram ticket and the amount of money Petya has.

The second line of each test case consists of one string ss, where si=Asi=A, if there is a bus station at ii-th crossroad, and si=Bsi=B, if there is a tram station at ii-th crossroad (2≤|s|≤1052≤|s|≤105).

It is guaranteed, that the sum of the length of strings ss by all test cases in one test doesn't exceed 105105.

Output

For each test case print one number — the minimal index ii of a crossroad Petya should go on foot. The rest of the path (i.e. from ii to nn he should use public transport).

Example

Input

5
2 2 1
BB
1 1 1
AB
3 2 8
AABBBBAABB
5 3 4
BBBBB
2 1 1
ABABAB

Output

2
1
3
1
6

Sponsor

题意看了半天愣是没明白

后来懂了

他只能做交通回家 所以找能一直做回家的那个点

如果从一开始就可以做到底

输出1

好像他最多只能做到n - 1站

然后记录不同字母的点因为要走到这个点他的起点又是1

所以总步数就是p + 1 (从0存的)- 1(初始点)+ 1(到终点)可约掉

还有一些细节看代码吧(如果我理解有误请留言)

#include <bits/stdc++.h>
const int maxn = 1e6 + 5;
int dp[maxn];
using namespace std;
int a, b, v;
void solve(){
    cin >> a >> b >> v;
    string s;
    cin >> s;
    
    int len = s.size();
	if(v < a && v < b || (s[len - 2] == 'A' ? a : b) > v){
        cout << s.size() << endl;
        return ;
    }
    int sum = 0;
    int p = -1;
    for(int i = len - 1 - 1; i >= 1; i--){
        if(s[i] != s[i - 1]){
            if(sum + (s[i] == 'A' ? a : b) > v){
                cout << p << endl;
                return ;
            }
            sum += (s[i] == 'A' ? a : b);
            p = i + 1;
            //cout << sum << endl;
        }
    }
    if(sum + (s[0] == 'A' ? a : b) > v){
    	cout << p << endl;
    	return ;
	}
    cout << 1 << endl;
}

int main(){
    int t;
    cin >> t;
    while(t--){
        solve();
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值