AB Substrings
Problem Statement
Snuke has N strings. The i-th string is si.
Let us concatenate these strings into one string after arranging them in some order. Find the maximum possible number of occurrences of AB
in the resulting string.
Constraints
- 1≤N≤104
- 2≤|si|≤10
- si consists of uppercase English letters.
Input
Input is given from Standard Input in the following format:
N s1 \vdots s_N
Output
Print the answer.
Sample Input 1
3 ABCA XBAZ BAD
Sample Output 1
2
For example, if we concatenate ABCA
, BAD
and XBAZ
in this order, the resulting string ABCABADXBAZ
has two occurrences of AB
.
Sample Input 2
9 BEWPVCRWH ZZNQYIJX BAVREA PA HJMYITEOX BCJHMRMNK BP QVFABZ PRGKSPUNA
Sample Output 2
4
Sample Input 3
7 RABYBBE JOZ BMHQUVA BPA ISU MCMABAOBHZ SZMEHMA
Sample Output 3
4
题意:找出给出的序列随意组合可以得到的最多的AB的序列的个数。
#include<iostream>
using namespace std;
int main(){
int N;
cin>>N;
string s[12345];
int a[4]={0};
int ans=0;
for(int i=0;i<N;i++){
cin>>s[i];
int l=s[i].size();
for(int j=1;j<l;j++){
if(s[i][j-1]=='A'&&s[i][j]=='B'){
ans++;
}
}
if(s[i][0]=='B'){
a[0]++;
}
if(s[i][l-1]=='A'){
a[1]++;
}
if(s[i][l-1]=='A'&&s[i][0]=='B'){
a[2]++;
}
}
// cout<<ans<<" "<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;
if(a[0]<a[1]){
ans+=a[0];
}
else ans+=a[1];
if(a[0]==a[1]&&a[0]==a[2]&&a[0]!=0) ans--;
cout<<ans<<endl;
return 0;
}