前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Codeforces Round #623 (Div. 2, based on VK Cup 2019-2020 - Elimination Round, Engine) B. Homecoming

Codeforces Round #623 (Div. 2, based on VK Cup 2019-2020 - Elimination Round, Engine) B. Homecoming

作者头像
风骨散人Chiam
发布2020-10-29 09:51:15
3990
发布2020-10-29 09:51:15
举报
文章被收录于专栏:CSDN旧文

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 n 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 s of length n, where si=A, if there is a bus station at i-th crossroad, and si=B, if there is a tram station at i-th crossroad. Currently Petya is at the first crossroad (which corresponds to s1) and his goal is to get to the last crossroad (which corresponds to sn).

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

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

For example, if s=“AABBBAB”, a=4 and b=3 then Petya needs:

buy one bus ticket to get from 1 to 3, buy one tram ticket to get from 3 to 6, buy one bus ticket to get from 6 to 7. Thus, in total he needs to spend 4+3+4=11 roubles. Please note that the type of the stop at the last crossroad (i.e. the character sn) does not affect the final expense.

Now Petya is at the first crossroad, and he wants to get to the n-th crossroad. After the party he has left with p 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 i to go on foot the first, so he has enough money to get from the i-th crossroad to the n-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 t (1≤t≤104).

The first line of each test case consists of three integers a,b,p (1≤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 s, where si=A, if there is a bus station at i-th crossroad, and si=B, if there is a tram station at i-th crossroad (2≤|s|≤105).

It is guaranteed, that the sum of the length of strings s by all test cases in one test doesn’t exceed 105.

Output For each test case print one number — the minimal index i of a crossroad Petya should go on foot. The rest of the path (i.e. from i to n he should use public transport). 这个题倒着从后向前模拟,模拟题傻逼

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;
char s[100000];
long long  a, b, p,t;
long long solve()
{
     int l = strlen(s + 1);
        int cnt = 0;
        int u = 0;
        for (int i = l; i >= 2; i--)
        {
            if (u == 0)
            {
                if (s[i - 1] == 'A')
                {
                    if (p >= a)
                    {
                        p -= a;
                        u = 1;
                        cnt++;
                    }
                    else
                        break;
                }
                if (s[i - 1] == 'B')
                {
                    if (p >= b)
                    {
                        p -= b;
                        u = 2;
                        cnt++;
                    }
                    else
                        break;
                }
            }
            else if (u == 1)
            {
                if (s[i - 1] == 'B')
                {
                    if (p >= b)
                    {
                        p -= b;
                        u = 2;
                        cnt++;
                    }
                    else
                        break;
                }
                else
                    cnt++;
            }
            else if (u == 2)
            {
                if (s[i - 1] == 'A')
                {
                    if (p >= a)
                    {
                        p -= a;
                        u = 1;
                        cnt++;
                    }
                    else
                        break;
                }
                else
                    cnt++;
            }
        }
        return  l - cnt;
}
int main()
{
    cin >> t;
    while (t--)
    {
        
        cin >> a >> b >> p;
        scanf("%s", s + 1);
       cout<<solve()<<endl;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/02/24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档