#include <bits/stdc++.h> const int maxn = 100005; using namespace std; string input; vector<char> groove; vector<vector<char>> output; int n, m; int compute(string s, string t) { // 求s字符串在t字符串中出现多少次 int index = 0; int count = 0; // b.find(a):从b中找a,返回字符串下标;若无,则返回-1 while ((index=t.find(s,index)) < t.size()) { count++; index++; } return count; } int main() { cin >> input; for (int i = 0; i < input.size(); i++) { if (input[i] >= 'a' && input[i] <= 'z') { groove.push_back(input[i]); } else if (input[i] == 'B') { groove.pop_back(); } else if (input[i] == 'P') { output.push_back(groove); // 二维数组的插入,每次插一行 } } // 输出纸上字符 // for(int i=0;i<output.size();i++){ // for(int j=0;j<output[i].size();j++){ // cout<<output[i][j]; // } // cout<<'\n'; // } cin >> m; for (int i = 1; i <= m; i++) { int x = 0, y = 0; cin >> x >> y; x--,y--; string sorce(output[x].begin(), output[x].end()); // 第x个打印的字符串 string target(output[y].begin(), output[y].end()); // 第y个打印的字符串 cout << compute(sorce, target) << '\n'; //cout<<sorce<<" "<<target<<'\n'; } }
过了70%,剩下的明天写
看了看,要用ac自动机,一点不会