|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
梦想星际舰队第18关 && FCOI #8 题解
第五题:QAQ
题目描述
给定由 A, Q 组成的字符串 S,你要统计三元组 (i,j,k) 的个数,满足 1≤i<j<k≤|S|,Si= Q, Sj= A, Sk= Q。
其实上就是要求 S 里面有多少子串为 QAQ。
本题使用多测,一共有 T 个测试用例。
输入格式
第一行一个整数 T。
接下来 T 行,每行一个字符串 S,表示一个测试用例。
输出格式
T 行,每行一个整数表示对应测试用例的答案。
输入输出样例
输入 #1
- 6
- QAQQ
- QAAQQ
- QQQ
- QQAQAAQ
- AAAQQQAAAQQQAAA
- QQAQAQAQAQAAAQAAQAQAQAQAQAAAQAQQAQ
复制代码
输出 #1
数据范围
对于 100% 的数据,保证 3≤|S|≤5000,1≤T≤1000,S 仅包含 A, Q 两个字符。
其他说明
本题目为 zhangjinxuan 原创题目。
测试链接:https://www.luogu.com.cn/problem/U325168
答案与解析
[/hide]
最佳战士排行榜
[/hide]
- #include <bits/stdc++.h>
- using namespace std;
- int t, n, Q[5001], QA[5001], QAQ[5001];
- string s;
- int main() {
- cin >> t;
- while (t--) {
- cin >> s;
- memset(Q, 0, sizeof(Q));
- memset(QA, 0, sizeof(QA));
- memset(QAQ, 0, sizeof(QAQ));
- for (int i = 0; i < s.size(); i++) {
- Q[i] = Q[i - 1], QA[i] = QA[i - 1], QAQ[i] = QAQ[i - 1];
- if (s[i] == 'Q') Q[i]++, QAQ[i] += QA[i - 1], QAQ[i] %= (long long)1e9 + 7;
- else QA[i] += Q[i - 1], QA[i] %= (long long)1e9 + 7;
- }
- cout << QAQ[s.size() - 1] << endl;
- }
- return 0;
- }
复制代码
借鉴一下代码 
|
|