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 ",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 ",i); } return 0; }