记录一下,上次校赛没有做出来。。。。。。。。。。。。。。。。
题目(大概好像意思)是:给出一个字符串,找出按顺序组合成的ABC这类字符串的个数。
比如:
ABC,则ABC顺序组合只有1个,组合序列为123
BAC,则ABC顺序组合只有0个
ABBABAC,则ABC顺序组合只有4个,组合序列为127,137,157,457
AABBCC,则顺序组合的有8个,组合序列为135,136,145,146,235,236,245,246
ABCBC,则顺序组合的有3个,组合序列为123,125,145
解题思路(早上起床的时候,突然想到,但在比赛的时候,其他队已经做出来了,额,自己记录一下就行):
先把输入字符串进行扫描,分别用int A, int AB来记录被扫描的字符串中出现A的个数和能组合成AB的个数,
当扫面到一个'B'这个字符时,把A结果累加起来成为AB的值。
当扫描到一个'C'这个字符时,把AB结果累加起来就是最后的结果。
直到把字符扫描完。
代码:

#include <iostream> #include <string> #define ll long long using namespace std; int main() { ll A,AB; // 用来记录被扫描的字符串中出现A的个数和能组合成AB的个数 ll ans; string str; while(cin >> str) { A = 0; AB = 0; ans = 0; for (int i = 0; i < str.size(); i++) { if (str[i] == 'A') A++; else if (str[i] == 'B') { AB += A; }else if (str[i] == 'C') {// 如果扫描到'C'字符了,则看一下前面能AB的组合数 ans += AB; } } cout << ans << endl; } return 0; }
。。。。。如果有错,欢迎指错。。。。。。。。。。。。