https://codeforces.ml/contest/1315/problem/B

思路:本题的坑点我认为在于BUS和TRAM重合的点,如果倒序从len遍历的话会出现这种情况:1 1 1 AB。

因为从A处上了BUS后就直接可以到达终点n了。所以遍历的时候要从len-1处开始遍历。

#include<bits/stdc++.h>
#define _for(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
typedef long long ll;
const int mod =1e6+7;
double esp=1e-6;
int INF =0x3f3f3f3f;
//const int inf = 1<<28;
const int MAXN=2000+10;

int main()
{
   int t;
   scanf("%d",&t);
   char s[100010];
   while(t--)
   {
       int a,b,p;
       scanf("%d%d%d",&a,&b,&p);
       scanf("%s",s+1);
       int len=strlen(s+1);
       int num=0,id=1;
       int tt=p;
       if(a>p&&b>p){printf("%d\n",len);continue;}
       int i,f=1;
       for(i=len-1;i>0;i--)
       {
           if(s[i] == 'A') {
                if(a > p) {i++;break;}
            }
            if(s[i] == 'B') if(b > p) {i++;break;}
           if(s[i]!=s[i-1])
           {
               if(s[i]=='A')
               {
                   if(p>=a){p-=a;f=0;}
                   else break;
               }
               else
               {
                   if(p>=b){p-=b;f=0;}
                   else break;
               }
           }
       }
       if(i==0)i=1;
       if(f)i=len;
       printf("%d\n",i);
   }
   return 0;
}